Java DatagramSocket ja SOCKS5 UDP-edastus
Mõistke, miks Java UDP-sokkel vajab SOCKS5 UDP-teostust ka siis, kui TCP-ühendused juba kasutavad SOCKSit.
Teie Java HTTP-päring töötab SOCKSi kaudu, kuid UDP-funktsioon saadab liiklust endiselt otse või ebaõnnestub. JVM-i SOCKS-omaduste seadistamine ei anna DatagramSocket-le SOCKS5 UDP-teostust.
DatagramSocket API saadab ja võtab vastu võrgu lõpp-punktidele adresseeritud datagramme. Selle meetod connect() valib sellele soklile partneri. See ei tee partneriga SOCKS-läbirääkimisi.
SOCKS5 UDP-marsruut nõuab lisatööd
SOCKS5 määratleb UDP-seose, mis luuakse TCP juhtühenduse kaudu. Seejärel vahetab klient kapseldatud datagramme puhverserveri antud edastusaadressiga. Iga kapseldatud sõnum määrab oma sihtkoha. Kliendi teostus peab haldama seda raamimist ja juhtühenduse eluiga.
Tavalise UDP-sokli suunamine puhverserveri TCP kuulamisporti jätab need sammud vahele. Rakenduse toorandmete saatmine sellele aadressile ei asenda seost.
Valige teek või rakenduse funktsioon, mis toetab selgesõnaliselt SOCKS5 UDP-edastust, ja kinnitage, et ka server toetab seda. SOCKS-tuge reklaamiv teek võib rakendada ainult TCP CONNECT-i. Protokolli spetsifikatsioon eristab käske.
Ka UDP-edastus vajab kasutatavat teed
Edukas TCP-ühendus puhverserveriga loob ainult juhttee. Tulemüürid või NAT-i käitumine võivad endiselt edastusse saadetud datagramme segada. Koguge tagastatud edastuse lõpp-punkt ja mis tahes edastustõrge enne, kui järeldate, et rakenduse sihtkoht on võrguühenduseta.
Lõpuks ei lisa SOCKS-i transporditugi UDP-le kohaletoimetamise tagatisi. Rakenduse enda ajalõpud, kadude käsitlemine ja sõnumi suuruse piirangud kehtivad ka pärast marsruudi muutumist.