Windows ਇੱਕ RDP ਸੈਸ਼ਨ ਲਈ ਕਿਹੜਾ ਪਤਾ ਦੱਸਦਾ ਹੈ?
WTS API ਇੱਕ RDP ਸੈਸ਼ਨ ਲਈ ਦੱਸਿਆ ਗਿਆ ਕਲਾਇੰਟ ਪਤਾ ਵਾਪਸ ਕਰਦਾ ਹੈ, ਅਤੇ ਰਜਿਸਟਰੀ ਨਹੀਂ। ਸਹੀ ਸੈਸ਼ਨ ID ਪੁੱਛੋ ਅਤੇ IPv4 ਜਾਂ IPv6 ਨੂੰ ਸਹੀ ਢੰਗ ਨਾਲ ਡੀਕੋਡ ਕਰੋ।
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 ਲਾਗ ਕਰੋ, ਕਿਉਂਕਿ ਉਹੀ ਵਰਤੋਂਕਾਰ ਦੁਬਾਰਾ ਜੁੜ ਕੇ ਨਵਾਂ ਮੁੱਲ ਲੈ ਸਕਦਾ ਹੈ। ਕਲਾਇੰਟ ਦਾ ਨਾਮ ਜਾਂ ਦੱਸਿਆ ਪਤਾ—ਕੋਈ ਵੀ ਪਹੁੰਚ ਦੇਣ ਲਈ ਕਾਫ਼ੀ ਸਬੂਤ ਨਹੀਂ।