[ad_1]
Hola, estoy trabajando en una empresa en la que muchas personas conectan de forma remota la misma computadora con el mismo usuario.
Quiero obtener el nombre de la computadora desde la que el usuario realizó el control remoto.
Quiero crear un pequeño programa para verificar en qué computadora el usuario que inició sesión se conectó de forma remota a la computadora y no importa si es C#, Java script o vbscript.
Además, si es posible, verifique el nombre de la computadora del usuario que inició sesión e instaló algún programa.
Quiero decir que si reviso el programa B instalado, obtengo el nombre de la computadora del usuario que inició sesión y que lo instaló.
Gracias, Imbaro.
Solución 1
Sin tener ninguna información sobre su aplicación, sólo puedo asumir que desea ejecutar un programa externo y encontrar los nombres DNS de las computadoras conectadas. Seguiré los pasos que seguiría:
Primero, iniciaría el proceso “netstat” con los argumentos de la línea de comando “-a”. Redirige el resultado para que puedas leerlo:
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();
Ahora tienes los datos de todo lo conectado a la computadora (entrada y salida). Puede ejecutar el comando netstat en una ventana de consola para ver el resultado. Luego, dividiría esto en líneas para obtener cada entrada y luego lo dividiría nuevamente en pestañas para obtener cada columna. Le interesa la tercera columna, que tiene el nombre de la computadora: puerto o dirección IP: puerto si no se puede determinar el nombre.
Solución 3
Hola 🙂
No es mi código, simplemente adaptado para versiones x64 (tal vez ayude a alguien muchos años después). Es solo para obtener el nombre de host actual del cliente RDP (escritorio remoto).
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]
コメント