RDP-lota þarf vistfang biðlara, og augljósu heimildirnar eru ekki sammála. CLIENTNAME gefur tölvunafn, skráin geymir gildi frá öðrum lotum, og mótframendi sambandssætisins getur verið vistfang gáttar eða NAT í stað biðlarans. Windows birtir vissulega tilkynnt biðlara-vistfang fyrir hverja lotu, en þú verður að biðja um réttu lotuna og afkóða svarið rétt.

Festu uppflettinguna við eina lotu

Byrjaðu á lotunni, ekki manneskjunni. Windows RDP-hýsill getur borið nokkrar lotur fyrir einn reikning, og vistfang sem sást fyrir endurtengingu passar kannski ekki lengur við virka tenginguna. Skráðu lotuauðkennið, notandann og athugunartímann saman. Lotuauðkennið er lykillinn sem viðmótið býst við, og það er gildið sem kemur í veg fyrir að tvær lotur ruglist saman.

Á hýslinum telja uppsettu lotutólin upp það sem er til; notaðu stjórnunaryfirlitið aðeins þegar þú hefur rétt til þess. Staðfestu valda auðkennið rétt fyrir fyrirspurnina, því endurnýtt auðkenni skilar gögnum annarrar lotu.

qwinsta

Kallaðu á WTSQuerySessionInformationW fyrir það auðkenni

Terminal Services-viðmótið svarar spurningunni með upplýsingaflokki 14, WTSClientAddress. Lítill ctypes-umbúðir duga á Windows, og þær forðast að lesa hive annars notanda. Kóðinn hér að neðan tekur skýrt lotuauðkenni og spyr staðbundna hýsilinn.

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)

Sendu heiltölu-lotuauðkennið sem þú staðfestir rétt áðan, og haltu núll-þjónshandfanginu fyrir staðbundnu vélina. Meðhöndlaðu misheppnað kall sem villu frekar en sem fjarverandi vistfang, því þau tvö leiða til ólíkra niðurstaðna. Fyrirspurn um lotu annars notanda krefst viðeigandi Query Information-heimildar, svo keyrðu tólið undir reikningi sem hefur fengið hana í stað þess að stiga réttindum ad hoc. Skilaða biðminnið tilheyrir viðmótinu og verður að losa það jafnvel þegar afkóðun mistekst.

Afkóðaðu fjölskylduna og losaðu síðan biðminnið

Byggingin er ekki IP-strengur. Fjölskyldusvið hennar ræður hvernig lesa á tuttugu vistfangsbætin: IPv4 byrjar á offseti tvö, en IPv6 byrjar á offseti núll. Ótilgreinda vistfangið þýðir að biðlarinn tilkynnti ekkert, sem er ekki það sama og tómur strengur. Tengingar um Remote Desktop Gateway eru skjalfestar sem tilfelli þar sem vistfangið er ekki tiltækt, svo lota sem fer um gátt tilkynnir ekkert gagnlegt um raunverulegt vistfang biðlarans. Þá verður fylgnin að flytjast yfir í eigin skrár gáttarinnar.

Prentaðu fjölskylduna við hlið vistfangsins meðan þú kembir, því misræmi þeirra á milli er venjuleg orsök trúverðugs en rangra gildis. Losaðu biðminnið með WTSFreeMemory í finally-blokki svo undantekning leki því ekki.

Aðskildu tilkynnta vistfangið frá sönnun

Tilkynnt biðlara-vistfang er fullyrðing sem biðlarinn leggur fram, ekki áreiðanleg athugun. Það er ekki TCP-mótframendinn, ekki leigutafla VPN-gáttarinnar og ekki opinbert vistfang biðlarans. Þegar raunverulega spurningin er hvaða VPN-leiga tilheyrir manneskju, tengdu þá auðkennda lotuskrá VPN-þjónsins á sama tíma. Þegar spurningin er hvaða uppspretta náði hlustandanum, lestu tengingartöfluna eða leyfðar þjónshliðar-logs.

Haltu þessum gildum sérmerktum í hvaða stuðningstóli sem er. Vantar WTS-niðurstöðu á hún að vera áfram farin í stað þess að falla aftur á handahófskennt skrárgildi frá annarri lotu. Skráðu lotuauðkennið við hlið vistfangsins, því sami notandi getur endurtengt og fengið nýtt gildi. Hvorki biðlaranafnið né tilkynnta vistfangið er næg sönnun fyrir því að veita aðgang.

Tengdir greinar