[ad_1]
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:
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
[ad_2]
コメント