RDP સત્રને ક્લાયન્ટ સરનામાની જરૂર છે, અને સ્પષ્ટ સ્રોતો સહમત નથી. CLIENTNAME કમ્પ્યુટરનું નામ આપે છે, રજિસ્ટ્રી બીજા સત્રોની કિંમતો રાખે છે, અને સોકેટનો સામેનો છેડો ક્લાયન્ટને બદલે ગેટવે અથવા NAT સરનામું હોઈ શકે છે. Windows દરેક સત્ર માટે જણાવેલ ક્લાયન્ટ સરનામું આપે છે, પરંતુ તમારે સાચું સત્ર પૂછવું પડશે અને જવાબ યોગ્ય રીતે ડિકોડ કરવો પડશે.

શોધને એક સત્ર સાથે જોડો

વ્યક્તિથી નહીં, સત્રથી શરૂ કરો. Windows RDP હોસ્ટ એક ખાતા માટે ઘણાં સત્રો રાખી શકે છે, અને ફરીથી જોડાણ પહેલાં જોયેલું સરનામું હવે જીવંત કડી સાથે મેળ ખાય નહીં. સત્ર ID, વપરાશકર્તા અને અવલોકનનો સમય સાથે નોંધો. સત્ર ID એ જ ચાવી છે જે API ધારે છે, અને એ જ કિંમત છે જે બે સત્રોને ભેગા થવાથી રોકે છે.

હોસ્ટ પર, સ્થાપિત સત્ર સાધનો જે છે તેની યાદી આપે છે; વ્યવસ્થાપક દૃશ્યનો ઉપયોગ ફક્ત ત્યારે કરો જ્યારે તમને તેનો હક હોય. પૂછપરછ પહેલાં તરત જ પસંદ કરેલ ID ની ખાતરી કરો, કારણ કે ફરી વપરાયેલ ID બીજા સત્રનો ડેટા પરત કરે છે.

qwinsta

તે ID માટે WTSQuerySessionInformationW ને કૉલ કરો

Terminal Services API માહિતી વર્ગ 14 સાથે પ્રશ્નનો જવાબ આપે છે, WTSClientAddress. Windows પર નાનું ctypes આવરણ પૂરતું છે, અને તે બીજા વપરાશકર્તાનું hive વાંચવાનું ટાળે છે. નીચેનો કોડ સ્પષ્ટ સત્ર ID લે છે અને સ્થાનિક હોસ્ટને પૂછે છે.

import ctypes
import ipaddress
import socket
from ctypes import wintypes

class WTS_CLIENT_ADDRESS(ctypes.Structure):
    _fields_ = [("AddressFamily", wintypes.DWORD),
                ("Address", ctypes.c_ubyte * 20)]

wts = ctypes.WinDLL("Wtsapi32", use_last_error=True)
query = wts.WTSQuerySessionInformationW
query.argtypes = [wintypes.HANDLE, wintypes.DWORD, ctypes.c_int,
                  ctypes.POINTER(ctypes.c_void_p), ctypes.POINTER(wintypes.DWORD)]
query.restype = wintypes.BOOL
free = wts.WTSFreeMemory
free.argtypes = [ctypes.c_void_p]

def client_address(session_id):
    buf = ctypes.c_void_p()
    size = wintypes.DWORD()
    if not query(None, session_id, 14, ctypes.byref(buf), ctypes.byref(size)):
        raise ctypes.WinError(ctypes.get_last_error())
    try:
        if size.value < ctypes.sizeof(WTS_CLIENT_ADDRESS):
            raise RuntimeError("short WTS buffer")
        value = ctypes.cast(buf, ctypes.POINTER(WTS_CLIENT_ADDRESS)).contents
        raw = bytes(value.Address)
        if value.AddressFamily == socket.AF_INET:
            addr = ipaddress.ip_address(raw[2:6])
        elif value.AddressFamily == socket.AF_INET6:
            addr = ipaddress.ip_address(raw[:16])
        else:
            return None
        return None if addr.is_unspecified else str(addr)
    finally:
        free(buf)

તમે હમણાં ચકાસેલ પૂર્ણાંક સત્ર ID પાસ કરો, અને સ્થાનિક મશીન માટે શૂન્ય સર્વર હેન્ડલ રાખો. નિષ્ફળ કૉલને ગેરહાજર સરનામા તરીકે નહીં, ભૂલ તરીકે ગણો, કારણ કે બંને જુદા તારણો તરફ દોરે છે. બીજા વપરાશકર્તાના સત્રની પૂછપરછ માટે યોગ્ય Query Information પરવાનગી જરૂરી છે, તેથી તાત્કાલિક અધિકાર વધારવાને બદલે જે ખાતાને તે આપવામાં આવી છે તેના હેઠળ સાધન ચલાવો. પરત કરેલ બફર API નું છે અને ડિકોડિંગ નિષ્ફળ થાય તોપણ તેને મુક્ત કરવું જોઈએ.

કુટુંબને ડિકોડ કરો, પછી બફર મુક્ત કરો

રચના IP શબ્દમાળા નથી. તેનું કુટુંબ ક્ષેત્ર નક્કી કરે છે કે વીસ સરનામા બાઇટ કેવી રીતે વાંચવા: IPv4 બે ઑફસેટ પર શરૂ થાય છે, જ્યારે IPv6 શૂન્ય ઑફસેટ પર શરૂ થાય છે. અનિર્દિષ્ટ સરનામું એટલે ક્લાયન્ટે કોઈ જણાવ્યું નહીં, જે ખાલી શબ્દમાળા સમાન નથી. Remote Desktop Gateway જોડાણો એવા કિસ્સા તરીકે દસ્તાવેજીકૃત છે જ્યાં સરનામું ઉપલબ્ધ નથી, તેથી ગેટવે દ્વારા થતું સત્ર ક્લાયન્ટના વાસ્તવિક સરનામા વિશે કંઈ ઉપયોગી જણાવતું નથી. પછી સહસંબંધ ગેટવેના પોતાના રેકોર્ડ તરફ ખસેડવો પડશે.

ડિબગ કરતી વખતે કુટુંબને સરનામા પાસે છાપો, કારણ કે બંને વચ્ચેની અસંગતિ વિશ્વસનીય પણ ખોટી કિંમતનું સામાન્ય કારણ છે. બફરને finally બ્લોકમાં WTSFreeMemory વડે મુક્ત કરો જેથી અપવાદ તેને લીક ન કરે.

જણાવેલ સરનામાને પુરાવાથી અલગ કરો

જણાવેલ ક્લાયન્ટ સરનામું ક્લાયન્ટ આપે છે તેવું નિવેદન છે, વિશ્વસનીય અવલોકન નથી. તે TCP સામેનો છેડો નથી, VPN ગેટવેનું લીઝ કોષ્ટક નથી, અને ક્લાયન્ટનું જાહેર સરનામું પણ નથી. જ્યારે સાચો પ્રશ્ન એ હોય કે કઈ VPN લીઝ એક વ્યક્તિની છે, ત્યારે તે જ સમયે VPN સર્વરના પ્રમાણિત સત્ર રેકોર્ડ સાથે સહસંબંધ કરો. જ્યારે પ્રશ્ન એ હોય કે કયો સ્રોત શ્રોતા સુધી પહોંચ્યો, ત્યારે જોડાણ કોષ્ટક અથવા માન્ય સર્વર-બાજુ લોગ વાંચો.

કોઈપણ સહાય સાધનમાં આ કિંમતોને અલગ લેબલ સાથે રાખો. ખૂટતું WTS પરિણામ ખૂટતું જ રહેવું જોઈએ, બીજા સત્રની મનસ્વી રજિસ્ટ્રી કિંમત પર પાછા ફરવાને બદલે. સરનામા પાસે સત્ર ID લોગ કરો, કારણ કે એ જ વપરાશકર્તા ફરી જોડાઈને નવી કિંમત મેળવી શકે છે. ક્લાયન્ટનું નામ કે જણાવેલ સરનામું—કોઈ પણ પ્રવેશ આપવા માટે પૂરતો પુરાવો નથી.

સંબંધિત લેખો