Java HTTP-pyyntösi toimii SOKSin kautta, mutta UDP-ominaisuus lähettää liikennettä silti suoraan tai epäonnistuu. JVM:n SOCKS-ominaisuuksien asettaminen ei anna DatagramSocket-luokalle SOCKS5 UDP -toteutusta.

DatagramSocket-rajapinta lähettää ja vastaanottaa verkon päätepisteille osoitettuja datagrammeja. Sen metodi connect() valitsee kyseiselle soketille vastapuolen. Se ei suorita vastapuolen kanssa SOCKS-neuvottelua.

SOCKS5 UDP -reitti vaatii lisätyötä

SOCKS5 määrittelee UDP-liitoksen, joka muodostetaan TCP-ohjausyhteyden yli. Tämän jälkeen asiakas vaihtaa kapseloituja datagrammeja välityspalvelimen antaman välitysosoitteen kanssa. Jokainen kapseloitu viesti ilmoittaa kohteensa. Asiakastoteutuksen on hallittava tämä kehystys ja ohjausyhteyden elinkaari.

Tavallisen UDP-soketin osoittaminen välityspalvelimen TCP-kuunteluporttiin ohittaa nämä vaiheet. Sovelluksesi raakadatagrammien lähettäminen tuohon osoitteeseen ei korvaa liitosta.

Valitse kirjasto tai sovellusominaisuus, joka tukee nimenomaisesti SOCKS5 UDP -välitystä, ja varmista, että palvelinkin tukee sitä. Kirjasto, joka mainostaa SOCKS-tukea, saattaa toteuttaa vain TCP CONNECTin. Protokollamäärittely erottaa komennot toisistaan.

UDP-välitys tarvitsee myös käyttökelpoisen reitin

Onnistunut TCP-yhteys välityspalvelimeen muodostaa vain ohjausreitin. Palomuurit tai NAT-käyttäytyminen voivat silti häiritä välitykselle lähetettyjä datagrammeja. Kerää palautettu välityksen päätepiste ja mahdollinen välitysvirhe ennen kuin päättelet, että sovelluksen kohde on offline-tilassa.

Lopuksi SOCKS-kuljetustuki ei lisää UDP:lle toimitusvarmuuksia. Sovelluksesi omat aikakatkaisut, häviöiden käsittely ja viestikoon rajoitukset ovat edelleen voimassa reitin vaihduttua.

Aiheeseen liittyvät artikkelit