Wane adireshi Windows ke bayarwa don zaman RDP?
API ɗin WTS na mayar da adireshin abokin ciniki da aka bayar don zaman RDP ɗaya, kuma rajista ba ta yin haka. Tambayi ID ɗin zaman daidai kuma ka warware IPv4 ko IPv6 daidai.
Zaman RDP na buƙatar adireshin abokin ciniki, kuma tushen bayyane ba su yarda ba. CLIENTNAME na ba da sunan kwamfuta, rajista na riƙe ƙimar wasu zama, kuma abokin sockin na iya zama adireshin ƙofa ko NAT maimakon abokin ciniki. Windows na bayar da adireshin abokin ciniki da aka bayar ga kowane zaman, amma dole ne ka tambayi zaman da ya dace kuma ka warware amsar daidai.
Ka ɗaure binciken ga zaman ɗaya
Fara da zaman, ba da mutum ba. Mai karɓar RDP na Windows na iya ɗaukar zama da yawa don asusu ɗaya, kuma adireshin da aka gani kafin sake haɗawa na iya rashin dacewa da hanyar da ke aiki yanzu. Rubuta ID ɗin zaman, mai amfani da lokacin lura tare. ID ɗin zaman shine mabuɗin da API ke tsammani, kuma shine ƙimar da ke hana rikicewar zama biyu.
A kan mai karɓa, kayan aikin zaman da aka shigar na lissafa abin da ke akwai; yi amfani da ra’ayin gudanarwa kawai lokacin da ka cancanci hakan. Tabbatar da ID ɗin da aka zaɓa kai tsaye kafin tambaya, domin ID ɗin da aka sake amfani da shi na mayar da bayanan wani zaman.
qwinsta
Ka kira WTSQuerySessionInformationW don wannan ID
API ɗin Sabis na Tasha na amsa tambayar da aji na bayanai 14, WTSClientAddress. Ƙaramin murfin ctypes ya isa a Windows, kuma yana guje wa karanta hive na wani mai amfani. Lambar da ke ƙasa na ɗaukar ID ɗin zaman bayyananne kuma ta tambayi mai karɓa na gida.
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)
Ka ba da ID ɗin zaman mai lamba da ka tabbatar yanzu, kuma ka riƙe hannun uwar garke na sifili don na’urar gida. Ka ɗauki kira da ya gaza a matsayin kuskure ba a matsayin adireshin da babu ba, domin biyun na kai ga yanke shawara daban-daban. Tambayar zaman wani mai amfani na buƙatar izinin Query Information da ya dace, don haka gudanar da kayan aikin a ƙarƙashin asusun da aka ba shi maimakon ƙara matsayi ba tare da tsari ba. Bufer ɗin da aka mayar na API ne kuma dole ne a sake shi ko da warwarewa ta gaza.
Ka warware iyali, sannan ka saki bufer ɗin
Tsarin ba zaren IP ba ne. Filin iyalinsa na yanke shawara yadda ake karanta baiti ashirin ɗin adireshin: IPv4 na farawa a matsayi na biyu, yayin da IPv6 ke farawa a matsayi na sifili. Adireshin da ba a fayyace ba na nufin abokin ciniki bai bayar da ɗaya ba, wanda ba ɗaya ba ne da zaren fanko. An rubuta haɗin Remote Desktop Gateway a matsayin yanayin da adireshin ba ya samuwa, don haka zaman da ya bi ta ƙofa ba ya bayar da wani abu mai amfani game da ainihin adireshin abokin ciniki. Sa’an nan dole ne alaƙar ta koma ga bayanan ƙofar kanta.
Ka buga iyalin tare da adireshin yayin da kake gyara kuskure, domin rashin jituwa tsakanin biyun shine dalilin da ya saba na ƙimar da za a yarda da ita amma ba daidai ba. Ka saki bufer ɗin da WTSFreeMemory a cikin toshe finally domin banda ya zubar da shi.
Ka raba adireshin da aka bayar da hujja
Adireshin abokin ciniki da aka bayar magana ce da abokin ciniki ya bayar, ba lura da za a dogara da ita ba. Ba abokin TCP ba ne, ba teburin hayar ƙofar VPN ba ne, kuma ba adireshin jama’a na abokin ciniki ba ne. Lokacin da ainihin tambaya ita ce wace hayar VPN ta shafi mutum, ka haɗa rikodin zaman da aka tabbatar na uwar garken VPN a lokaci guda. Lokacin da tambaya ita ce wace tushen ya isa mai sauraro, ka karanta teburin haɗi ko bayanan da aka yarda a gefen uwar garke.
Ka riƙe waɗannan ƙimomin da alama dabam a kowane kayan aikin tallafi. Sakamakon WTS da ya ɓace ya kamata ya kasance a ɓace maimakon komawa ga wata ƙimar rajista da ba ta dace ba daga wani zaman. Yi rikodin ID ɗin zaman kusa da adireshin, domin mai amfani ɗaya na iya sake haɗawa kuma ya sami sabuwar ƙima. Ko sunan abokin ciniki ko adireshin da aka bayar ba su isa hujja ba don ba da izinin shiga.