Waa kee cinwaanka Windows u soo sheegto fadhi RDP?
API-ga WTS wuxuu soo celiyaa cinwaanka macmiilka la soo sheegay ee hal fadhi RDP, diiwaanka se ma celiyo. Weydii aqoonsiga fadhiga saxda ah oo si sax ah u deji IPv4 ama IPv6.
Fadhi RDP wuxuu u baahan yahay cinwaan macmiil, isha cadna isku raacsana. CLIENTNAME waxay bixisaa magaca kombuyuutarka, diiwaanku wuxuu hayaa qiyamka fadhiyada kale, dhinaca kale ee socket-ka wuxuu noqon karaa cinwaanka gateway ama NAT halkii macmiilka. Windows dhab ahaan wuxuu soo bandhigaa cinwaan macmiil la soo sheegay fadhi kasta, laakiin waa inaad weydiisataa fadhiga saxda ah oo si sax ah u deji jawaabta.
Ku xir raadinta hal fadhi
Ka bilow fadhiga, ma aha qofka. Martigeliyaha RDP ee Windows wuxuu qaadi karaa dhowr fadhi hal akoon, cinwaanka la arkay kahor dib u xidhkaana laga yaabee inuusan hadda u dhigmin xidhka shaqeynaya. Qor aqoonsiga fadhiga, isticmaalaha iyo waqtiga fiirsashada wada. Aqoonsiga fadhiga waa furaha API-ga filayo, waana qiyaasta ka hortagta in laba fadhi la qaldo.
Martigeliyaha, qalabka fadhiga ee rakiban waxay taxaan waxa jira; isticmaal aragtida maamulka kaliya markaad xaq u leedahay. Xaqiiji aqoonsiga la doortay isla goorta ka hor weydiinta, sababtoo ah aqoonsi dib loo isticmaalay wuxuu soo celiyaa xogta fadhi kale.
qwinsta
U wac WTSQuerySessionInformationW aqoonsigaas
API-ga Terminal Services wuxuu ka jawaabaa su'aasha fasalka macluumaadka 14, WTSClientAddress. Duubis yar oo ctypes ah ayaa ku filan Windows, wuuna ka fogaadaa akhrinta hive isticmaale kale. Koodka hoose wuxuu qaataa aqoonsi fadhi cad oo weydiiya martigeliyaha maxalliga ah.
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)
Gudbi aqoonsiga fadhi oo tiro dhan oo aad hadda xaqiijisay, oo hay server-handle eber ah mishiinka maxalliga ah. U qaado wicid guuldareystay khalad ahaan ee ma aha cinwaan maqan, sababtoo ah labaduba waxay keenaan gabagabo kala duwan. Weydiinta fadhiga isticmaale kale waxay u baahan tahay ogolaanshaha Query Information ee ku habboon, markaa ku socodsii qalabka akoon la siiyay halkii aad si degdeg ah kor u qaadi lahayd awoodaha. Buffer-ka la soo celiyay waxaa leh API-ga waana in la sii daayaa xitaa marka dejinta guuldareysato.
Deji qoyska, ka dib sii daa buffer-ka
Qaabdhismeedku ma aha xarig IP. Goobta qoyskiisu waxay go'aamisaa sida labaatan bayt ee cinwaanka loo akhriyo: IPv4 wuxuu ka bilaabmaa offset laba, halka IPv6 uu ka bilaabmo offset eber. Cinwaanka aan la cayimin waxay ka dhigan tahay macmiilku ma soo sheegan midna, taas oo aan la mid ahayn xarig madhan. Xidhiidhka Remote Desktop Gateway waxaa lagu diiwaan geliyay inuu yahay xaalad cinwaanku aan la heli karin, markaa fadhi gateway ku mara waxba faa'iido leh kama soo sheego cinwaanka dhabta ah ee macmiilka. Markaas isku-xidhka waa in loo guuraa diiwaannada gateway-ga laftiisa.
Markaad baaritaan sameynayso ku daabac qoyska cinwaanka agtiisa, sababtoo ah is-khilaafka labadooda waa sababta caadiga ah ee qiime macquul ah laakiin khaldan. Sii daa buffer-ka WTSFreeMemory gudaha block finally si qalad aanu u daadin.
Kala sooc cinwaanka la soo sheegay iyo caddaynta
Cinwaanka macmiilka la soo sheegay waa hadal uu bixiyo macmiilku, ma aha fiirsasho lagu kalsoonaan karo. Ma aha dhinaca kale ee TCP, ma aha shaxda kireedka gateway-ga VPN, mana aha cinwaanka dadweynaha ee macmiilka. Marka su'aasha dhabta ahi tahay kireedka VPN kee u leh qof, isku-xidh diiwaanka fadhiga la xaqiijiyay ee server-ka VPN isla waqtigaas. Marka su'aashu tahay isha kee gaartay dhagaystaha, akhri shaxda xidhiidhka ama diiwaannada server-ka ee la oggolaaday.
Ku hay qiyamkan sumad gaar ah leh qalab kasta oo taageero. Natiijada WTS ee maqan waa in ay maqnaataa halkii ay ku noqon lahayd qiime diiwaan aan loo baahnayn oo ka yimid fadhi kale. Qor aqoonsiga fadhiga cinwaanka agtiisa, sababtoo ah isla isticmaalaha ayaa dib u xidhmi kara oo heli kara qiime cusub. Magaca macmiilka ama cinwaanka la soo sheegay midkoodna ma aha caddayn ku filan oo lagu bixiyo gelitaan.