दूरस्थ लॉग उपयोगकर्ता से कंप्यूटर का नाम प्राप्त करें।


नमस्ते, मैं एक ऐसे कंपनी में काम कर रहा हूँ जहाँ बहुत सारे लोग एक ही कंप्यूटर को एक ही उपयोगकर्ता के साथ रिमोट से कनेक्ट कर रहे हैं।

मैं उस कंप्यूटर का नाम प्राप्त करना चाहता हूं जिससे उपयोगकर्ता ने रिमोट किया था।

मैं यह जांचने के लिए एक छोटा प्रोग्राम बनाना चाहता हूं कि लॉग ऑन उपयोगकर्ता किस कंप्यूटर से रिमोट है और इससे कोई फर्क नहीं पड़ता कि सी # या जावा स्क्रिप्ट या वीबीस्क्रिप्ट।

इसके अलावा, यदि संभव हो तो, उपयोगकर्ता के कंप्यूटर नाम की जांच करने के लिए लॉग इन करें और कुछ प्रोग्राम इंस्टॉल करें।
मेरा मतलब है कि यदि मैं इंस्टॉल किए गए प्रोग्राम बी की जांच करता हूं, तो मुझे लॉग इन उपयोगकर्ता का कंप्यूटर नाम मिलता है जिसने इसे इंस्टॉल किया है।

धन्यवाद, इम्बारो।

समाधान 1

आपके एप्लिकेशन के बारे में कोई जानकारी दिए बिना मैं केवल यह मान सकता हूं कि आप एक बाहरी प्रोग्राम चलाना चाहते हैं और किसी भी कनेक्टेड कंप्यूटर के DNS नाम ढूंढना चाहते हैं। मैं वे कदम उठाऊंगा जो मैं उठाऊंगा:

सबसे पहले, मैं कमांड लाइन तर्क “-ए” के साथ “नेटस्टैट” प्रक्रिया शुरू करूंगा। आउटपुट को पुनर्निर्देशित करें ताकि आप इसे पढ़ सकें:

सी#
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();

अब आपके पास कंप्यूटर से जुड़ी हर चीज़ (अंदर और बाहर) का डेटा है। आउटपुट देखने के लिए आप कंसोल विंडो में नेटस्टैट कमांड चला सकते हैं। फिर आपको प्रत्येक प्रविष्टि प्राप्त करने के लिए इसे लाइनों द्वारा विभाजित करना होगा, और फिर प्रत्येक कॉलम प्राप्त करने के लिए इसे फिर से टैब द्वारा विभाजित करना होगा। आप तीसरे कॉलम में रुचि रखते हैं, जिसमें कंप्यूटरनाम:पोर्ट या आईपैडड्रेस:पोर्ट है, यदि नाम निर्धारित नहीं किया जा सकता है।

समाधान 3

नमस्ते 🙂

मेरा कोड नहीं, बस x64 संस्करणों के लिए अनुकूलित (शायद कई वर्षों बाद किसी को मदद मिलेगी)। यह केवल वर्तमान आरडीपी (रिमोट डेस्कटॉप) क्लाइंट होस्टनाम प्राप्त करने के लिए है।

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をコピーしました