Àdírẹ́sì wo ni Windows ń ròyìn fún ìpàdé RDP?
WTS API ń dá àdírẹ́sì oníbàárà tí a ròyìn padà fún ìpàdé RDP kan, ṣùgbọ́n ìforúkọsílẹ̀ kò ṣe bẹ́ẹ̀. Béèrè fún ID ìpàdé tó tọ́ kí o sì túmtú IPv4 tàbí IPv6 dáadáa.
Ìpàdé RDP nílò àdírẹ́sì oníbàárà, àwọn orísun tó hàn gbangba kò sì fohùn ṣọ̀kan. CLIENTNAME ń fún ni ní orúkọ kọ̀mpútà, ìforúkọsílẹ̀ ń pa àwọn iye mọ́ láti ìpàdé mìíràn, ẹ̀gbẹ́ kejì sọ́kẹ́tì sì lè jẹ́ àdírẹ́sì ẹnubodè tàbí NAT dípò oníbàárà. Windows ń fi àdírẹ́sì oníbàárà tí a ròyìn hàn fún ìpàdé kọ̀ọ̀kan, ṣùgbọ́n o gbọ́dọ̀ béèrè fún ìpàdé tó tọ́ kí o sì túmtú ìdáhùn dáadáa.
So ìwárí mọ́ ìpàdé kan
Bẹ̀rẹ̀ pẹ̀lú ìpàdé, kì í ṣe ènìyàn. Olùgbàlejò RDP Windows lè gbé ìpàdé púpọ̀ fún àkọsílẹ̀ kan, àdírẹ́sì tí a rí ṣáájú àtúnso pẹ̀lú sì lè máà bára ìsopọ̀ tó ń ṣiṣẹ́ mu mọ́. Ṣàkọ́sílẹ̀ ID ìpàdé, olùmúlò àti àkókò àkíyèsí papọ̀. ID ìpàdé ni kọ́kọ́rọ́ tí API ń retí, òun sì ni iye tó ń dá àbò bo ìpàdé méjì kúrò nínú ìdàrúdàpọ̀.
Lórí olùgbàlejò, àwọn irinṣẹ́ ìpàdé tí a fi sórí ń ṣàkọsílẹ̀ ohun tó wà; lo ìwò àbójútó nígbà tí o bá ní ẹ̀tọ́ sí i. Jẹ́rìí ID tí o yàn ní kété ṣáájú ìbéèrè, nítorí ID tí a tún lò ń dá dátà ìpàdé mìíràn padà.
qwinsta
Pe WTSQuerySessionInformationW fún ID yẹn
API Terminal Services ń dá ìbéèrè lóhùn pẹ̀lú kíláàsì ìsọfúnni 14, WTSClientAddress. Ìbòmọ́lẹ̀ ctypes kékeré tó lórí Windows, ó sì yẹra fún kíkà hive olùmúlò mìíràn. Kóòdù tó wà nísàlẹ̀ ń gba ID ìpàdé tó ṣe kedere ó sì béèrè lọ́wọ́ olùgbàlejò àdúgbò.
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)
Fi ID ìpàdé odidi tí o ṣẹ̀ṣẹ̀ jẹ́rìí ránṣẹ́, kí o sì pa ọwọ́ sáàbà òdo mọ́ fún ẹ̀rọ àdúgbò. Ka ìpè tí kò yọrí sí àṣeyọrí gẹ́gẹ́ bí àṣìṣe kì í ṣe àdírẹ́sì tó kùnà, nítorí àwọn méjèèjì ń yọrí sí àwọn ìparí tó yàtọ̀. Ìbéèrè ìpàdé olùmúlò mìíràn nílò àṣẹ Query Information tó yẹ, nítorí náà ṣiṣẹ́ irinṣẹ́ náà lábẹ́ àkọsílẹ̀ tí a fún ní àṣẹ yẹn dípò gbígbé àǹfààní ga ní àkókò kúkúrú. Bọ́ọ̀sì tí a dá padà jẹ́ ti API ó sì gbọ́dọ̀ tú sílẹ̀ pàápàá nígbà tí ìtúmtú bá kùnà.
Túmtú ẹbí, kí o sì tú bọ́ọ̀sì sílẹ̀
Ìtò náà kì í ṣe okùn IP. Pápá ẹbí rẹ̀ ń pinnu bí a ṣe ń ka ogún báìtì àdírẹ́sì: IPv4 bẹ̀rẹ̀ ní àléfọ̀ méjì, nígbà tí IPv6 bẹ̀rẹ̀ ní àléfọ̀ òdo. Àdírẹ́sì tí a kò pàtó ń túmọ̀ sí pé oníbàárà kò ròyìn ọ̀kankan, èyí kò jẹ́ ohun kan náà pẹ̀lú okùn òfo. Àwọn ìsopọ̀ Remote Desktop Gateway ni a kọ sílẹ̀ gẹ́gẹ́ bí ipò tí àdírẹ́sì kò sí, nítorí náà ìpàdé tí ó gba ẹnubodè kò ròyìn ohunkóhun tó wúlò nípa àdírẹ́sì gidi oníbàárà. Nígbà náà ìsopọ̀ gbọ́dọ̀ lọ sí àwọn àkọsílẹ̀ ẹnubodè fúnra rẹ̀.
Tẹ̀ ẹbí jáde lẹ́gbẹ̀ẹ́ àdírẹ́sì nígbà tí o ń ṣe àtúnṣe, nítorí àìbáramu láàrin àwọn méjèèjì ni ohun tó ń fa iye tó dàbí ojúlówó ṣùgbọ́n tí kò tọ́. Tú bọ́ọ̀sì náà sílẹ̀ pẹ̀lú WTSFreeMemory nínú blọ́ọ̀kì finally kí ìyàtọ̀ má baà jẹ́ kó tú jáde.
Ya àdírẹ́sì tí a ròyìn kúrò nínú ẹ̀rí
Àdírẹ́sì oníbàárà tí a ròyìn jẹ́ gbólóhùn tí oníbàárà pèsè, kì í ṣe àkíyèsí tí a lè gbẹ́kẹ̀ lé. Kì í ṣe ẹ̀gbẹ́ kejì TCP, kì í ṣe tábìlì ìyásọ́tọ̀ ẹnubodè VPN, kì í sì í ṣe àdírẹ́sì gbangba oníbàárà. Nígbà tí ìbéèrè gidi bá jẹ́ ìyásọ́tọ̀ VPN wo ni ó jẹ́ ti ènìyàn kan, so àkọsílẹ̀ ìpàdé tí a fìdí rẹ̀ múlẹ̀ ti sáàbà VPN pọ̀ ní àkókò kan náà. Nígbà tí ìbéèrè bá jẹ́ orísun wo ni ó dé ọ̀dọ̀ olùgbọ́, ka tábìlì ìsopọ̀ tàbí àwọn àkọsílẹ̀ ẹ̀gbẹ́ sáàbà tí a gbà láàyè.
Pa àwọn iye wọ̀nyí mọ́ pẹ̀lú àmì ọ̀tọ̀ọ̀tọ̀ nínú irinṣẹ́ àtìlẹ́yìn èyíkéyìí. Àbájáde WTS tí ó ṣáìnì gbọ́dọ̀ wà ní ṣáìnì dípò kí ó padà sí iye ìforúkọsílẹ̀ àìdájú láti ìpàdé mìíràn. Ṣàkọsílẹ̀ ID ìpàdé lẹ́gbẹ̀ẹ́ àdírẹ́sì, nítorí olùmúlò kan náà lè tún sopọ̀ kí ó sì gba iye tuntun. Bóyá orúkọ oníbàárà tàbí àdírẹ́sì tí a ròyìn kò tó ẹ̀rí láti fúnni ní àǹfààní.