Jūsų Java HTTP užklausa veikia per SOCKS, tačiau UDP funkcija vis tiek siunčia srautą tiesiogiai arba nepavyksta. JVM SOCKS savybių nustatymas nesuteikia DatagramSocket SOCKS5 UDP diegimo.

DatagramSocket API siunčia ir priima duomenų gramas, adresuotas tinklo galiniams taškams. Jo metodas connect() parenka to lizdo partnerį. Jis neatlieka SOCKS derybų su partneriu.

SOCKS5 UDP maršrutas reikalauja papildomo darbo

SOCKS5 apibrėžia UDP asociaciją, sukuriamą per TCP valdymo ryšį. Tada klientas apsikeičia inkapsuliuotomis duomenų gramomis su tarpinio serverio pateiktu perdavimo adresu. Kiekviena inkapsuliuota žinutė nurodo savo paskirties vietą. Kliento diegimas turi apdoroti tą įrėminimą ir valdymo ryšio trukmę.

Įprasto UDP lizdo nukreipimas į tarpinio serverio TCP klausymosi prievadą praleidžia tuos veiksmus. Jūsų programos neapdorotų duomenų gramų siuntimas į tą adresą nepakeičia asociacijos.

Pasirinkite biblioteką ar programos funkciją, kuri aiškiai palaiko SOCKS5 UDP perdavimą, ir patvirtinkite, kad serveris taip pat jį palaiko. Biblioteka, kuri reklamuoja SOCKS palaikymą, gali diegti tik TCP CONNECT. Protokolo specifikacija išskiria šias komandas.

UDP perdavimui taip pat reikia tinkamo kelio

Sėkmingas TCP ryšys su tarpiniu serveriu sukuria tik valdymo kelią. Ugniasienės ar NAT elgsena vis dar gali trukdyti duomenų gramoms, siunčiamoms perdavimui. Surinkite grąžintą perdavimo galinį tašką ir bet kokią perdavimo klaidą, prieš darydami išvadą, kad programos paskirties vieta neprisijungusi.

Galiausiai, SOCKS transporto palaikymas neprideda UDP pristatymo garantijų. Jūsų programos laiko limitai, nuostolių tvarkymas ir pranešimų dydžio apribojimai galioja ir pakeitus maršrutą.

Susiję straipsniai