Dapatkan nama komputer dari pengguna yang login jarak jauh.

pemrograman


Hai, saya bekerja di perusahaan yang banyak orangnya menghubungkan komputer yang sama dengan pengguna yang sama dari jarak jauh.

Saya ingin mendapatkan nama komputer tempat pengguna melakukan remote.

Saya ingin membuat program kecil untuk memeriksa komputer mana yang di-remote pengguna yang masuk ke komputer dan tidak masalah apakah c# atau java script atau vbscript.

Juga, jika memungkinkan, untuk memeriksa nama komputer pengguna yang login dan menginstal beberapa program.
Maksud saya, jika saya memeriksa program B yang terinstal, saya mendapatkan nama komputer dari pengguna login yang menginstalnya.

Terima kasih, Imbaro.

Solusi 1

Tanpa informasi apa pun tentang aplikasi Anda, saya hanya dapat berasumsi bahwa Anda ingin menjalankan program eksternal dan menemukan nama DNS dari setiap komputer yang terhubung. Saya akan melalui langkah-langkah yang akan saya ambil:

Pertama, saya akan memulai proses “netstat” dengan argumen baris perintah “-a”. Arahkan ulang output sehingga Anda dapat membacanya:

C#
Process netStat = new Process();
netStat.StartInfo.UseShellExecute = true;
netStat.StartInfo.CreateNoWindow = true;
netStat.StartInfo.FileName = "netstat";
netStat.StartInfo.Arguments ="-a";
netStat.StartInfo.RedirectStandardOutput = true;

netStat.Start();   //Can take several seconds to execute, good use for BackgroundWorker

string output = netStat.StandardOutput.ReadToEnd();

Sekarang Anda memiliki data untuk semua yang terhubung ke komputer (masuk dan keluar). Anda dapat menjalankan perintah netstat di jendela konsol untuk melihat hasilnya. Anda kemudian akan membaginya berdasarkan baris untuk mendapatkan setiap entri, dan kemudian membaginya lagi berdasarkan tab untuk mendapatkan setiap kolom. Anda tertarik pada kolom ketiga, yang memiliki nama komputer:port atau alamat ip:port jika namanya tidak dapat ditentukan.

Solusi 3

Hai 🙂

Bukan kode saya, hanya diadaptasi untuk versi x64 (mungkin membantu seseorang bertahun-tahun kemudian). Hanya untuk mendapatkan nama host klien RDP (Remote Desktop) saat ini.

Private Declare PtrSafe Sub WTSFreeMemory Lib "wtsapi32.dll" (ByVal pMemory As Any)
Private Declare PtrSafe Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As LongLong)
Private Declare PtrSafe Function WTSQuerySessionInformationA Lib "wtsapi32.dll" (ByVal hServer As LongLong, ByVal sessionId As LongLong, ByVal wtsInfoClass As LongLong, ByRef pBuffer As LongLong, ByRef dwSize As LongLong) As LongLong

 Public Function GetMachinenameofCurrentSession() As String
        Dim RetVal As LongLong      'Return Value of API Call
        Dim lpBuffer As LongLong    'Buffer to Hold Info Returned
        Dim Count As LongLong       'Length of Buffer info
        Dim MachineName As String
        'If the function succeeds, the return value is a nonzero value.
        'If the function fails, the return value is zero.
        'To get extended error information, call GetLastError API.
        RetVal = WTSQuerySessionInformationA(WTS_CURRENT_SERVER_HANDLE, _
        WTS_CURRENT_SESSION, _
        WTSClientName, _
        lpBuffer, _
        Count)
        
        MachineName = GetStringFromLP(lpBuffer)
        WTSFreeMemory lpBuffer 'Free the memory used by the buffer.
        GetMachinenameofCurrentSession = MachineName
End Function

Private Function GetStringFromLP(ByVal StrPtr As LongLong) As String
    
    Dim b As Byte
    Dim tempStr As String
    Dim bufferStr As String
    Dim Done As Boolean
    Done = False
    Do
        ' Get the byte/character that StrPtr is pointing to.
        CopyMemory b, ByVal StrPtr, 1
        If b = 0 Then ' If you've found a null character,
            Done = True
        Else
            tempStr = Chr$(b)
            bufferStr = bufferStr & tempStr 'Add it to the string
            StrPtr = StrPtr + 1 ' Increment the pointer to next
        End If
    Loop Until Done
    
    GetStringFromLP = bufferStr

End Function

コメント

タイトルとURLをコピーしました