IYiphi ikheli i-Windows elibika ngesikhathi se-RDP?
I-WTS API ibuyisela ikheli leklayenti elibikiwe besikhathi esisodwa se-RDP, futhi irejista ayikwenzi. Buza i-ID yesikhathi efanele futhi uhlukanise kahle i-IPv4 noma i-IPv6.
Isikhathi se-RDP sidinga ikheli leklayenti, futhi imithombo ebonakala icacile ayivumelani. CLIENTNAME inikeza igama lekhompyutha, irejista igcina amanani avela kwezinye izikhathi, futhi uhlangothi olulodwa lwe-socket kungaba ikheli le-geyithiweyi noma le-NAT esikhundleni seklayenti. I-Windows iveza ngempela ikheli leklayenti elibikiwe ngesikhathi ngasinye, kodwa kufanele ubuze isikhathi esifanele futhi uhlukanise impendulo ngendlela efanele.
Bophela ukusesha esikhathini esisodwa
Qala ngesikhathi, hhayi ngumuntu. Umsingathi we-RDP we-Windows angathwala izikhathi eziningi ze-akhawunti eyodwa, futhi ikheli elibonwe ngaphambi kokuxhuma kabusha kungenzeka lingasahambisani nokuxhumana okusebenzayo. Bhala i-ID yesikhathi, umsebenzisi kanye nesikhathi sokuqaphela ndawonye. I-ID yesikhathi iwukhiye olindelwe i-API, futhi yilona nalelo nani elivimbela izikhathi ezimbili ukuthi zingadideki.
Kumsingathi, amathuluzi esikhathi afakiwe asho lokho okukhona; sebenzisa umbono wokuphatha kuphela uma unelungelo lawo. Qinisekisa i-ID ekhethiwe ngokushesha ngaphambi kombuzo, ngoba i-ID esetshenziswe kabusha ibuyisela idatha yesinye isikhathi.
qwinsta
Shayela i-WTSQuerySessionInformationW kuleyo ID
I-API ye-Terminal Services iphendula umbuzo ngekilasi lolwazi 14, WTSClientAddress. Isisonga esincane se-ctypes sanele ku-Windows, futhi sigwema ukufunda i-hive yomunye umsebenzisi. Ikhodi engezansi ithatha i-ID yesikhathi ecacile futhi ibuza umsingathi wendawo.
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)
Dlulisa i-ID yesikhathi eyinombholo oyiphelele oyiqinisekisile manje, futhi gcina isibambeli seseva esinguziro somsheshini wendawo. Thatha ukushayela okwehlulekile njengephutha hhayi njengekheli elingekho, ngoba kokubili kuholela eziphethweni ezihlukene. Umbuzo wesikhathi somunye umsebenzisi udinga imvume efanele ye-Query Information, ngakho sebenzisa ithuluzi ngaphansi kwe-akhawunti enikezwe yona esikhundleni sokuphakamisa amalungelo ngokushesha. Ibhafa ebuyisiwe ingeye-API futhi kufanele ikhululwe ngisho nalapho ukuhlukanisa kwehluleka.
Hlukanisa umndeni, bese ukhulula ibhafa
Isakhiwo akusona isigaxa se-IP. Inkambu yawo yomndeni inquma ukuthi amabhayithi angamashumi amabili ekheli afundwa kanjani: i-IPv4 iqala ku-offset yesibili, kanti i-IPv6 iqala ku-offset enguziro. Ikheli elingacaciswanga lisho ukuthi iklayenti alibikanga nelilodwa, lokho akufani nesigaxa esingenalutho. Ukuxhumana kwe-Remote Desktop Gateway kubhalwe njengesimo lapho ikheli lingatholakali, ngakho isikhathi esidlula nge-geyithiweyi asibiki lutho olusizo mayelana nekheli langempela leklayenti. Ngakho ukuhlobanisa kufanele kudlulele kumarekhodi e-geyithiweyi ngokwayo.
Printa umndeni eceleni kwekheli ngenkathi uxazulula amaphutha, ngoba ukungahambisani phakathi kwakho kokubili kuyimbangela evamile yenani elikholakalayo kodwa elingalungile. Khulula ibhafa nge-WTSFreeMemory kubhlokhi le-finally ukuze okukhiphele ngaphandle kungayikhiphi.
Hlukanisa ikheli elibikiwe nobufakazi
Ikheli leklayenti elibikiwe liyisitatimende esinikezwa iklayenti, hhayi ukuqaphela okuthembekile. Akulona uhlangothi lwe-TCP, akulona ithebula lokuqashisa le-geyithiweyi ye-VPN, futhi akulona ikheli lomphakathi leklayenti. Lapho umbuzo wangempela uwukuthi yikuphi ukuqashisa kwe-VPN okungokomuntu othile, hlobanisa irekhodi lesikhathi eligunyaziwe leseva ye-VPN ngasikhathi sinye. Lapho umbuzo uwukuthi yimuphi umthombo ofinyelele isilaleli, funda ithebula lokuxhumana noma amalogi aseva avunyelwe.
Gcina lawa manani ehlukanisiwe ngelebula kunoma yithuluzi losizo. Umphumela we-WTS ongekho kufanele uhlale ungekho esikhundleni sokubuyela kunani lerejista elinganqunywanga elivela kwesinye isikhathi. Bhala i-ID yesikhathi eceleni kwekheli, ngoba umsebenzisi ofanayo angaxhuma kabusha futhi athole inani elisha. Igama leklayenti noma ikheli elibikiwe—akukho kokubili okungubufakazi obanele bokunikeza ukufinyelela.