Java DatagramSocket и препраќање UDP преку SOCKS5
Разберете зошто на Java UDP сокетот му треба SOCKS5 UDP имплементација и кога TCP врските веќе користат SOCKS.
Вашето Java HTTP барање работи преку SOCKS, но UDP функцијата сè уште испраќа сообраќај директно или не успева. Поставувањето на SOCKS својствата на JVM не му дава на DatagramSocket SOCKS5 UDP имплементација.
DatagramSocket API испраќа и прима датаграми адресирани до мрежни крајни точки. Неговиот метод connect() избира партнер за тој сокет. Тој не спроведува SOCKS преговори со партнерот.
SOCKS5 UDP рутата бара дополнителна работа
SOCKS5 дефинира UDP асоцијација воспоставена преку TCP контролна врска. Потоа клиентот разменува инкапсулирани датаграми со адресата за препраќање што ја дава проксито. Секоја инкапсулирана порака го идентификува своето одредиште. Клиентската имплементација мора да го обработи тоа рамкирање и животот на контролната врска.
Насочувањето на обичен UDP сокет кон TCP портата за слушање на проксито ги прескокнува тие чекори. Испраќањето на суровите датаграми на вашата апликација на таа адреса не ја заменува асоцијацијата.
Изберете библиотека или функција на апликацијата што експлицитно поддржува препраќање UDP преку SOCKS5 и потврдете дека и серверот го поддржува. Библиотека што рекламира SOCKS поддршка може да имплементира само TCP CONNECT. Спецификацијата на протоколот ги разликува командите.
Препраќањето UDP бара и употреблива патека
Успешна TCP врска со проксито воспоставува само контролната патека. Огнените ѕидови или однесувањето на NAT сè уште можат да пречат на датаграмите испратени до препраќањето. Соберете ја вратената крајна точка на препраќањето и секоја грешка при препраќање пред да заклучите дека одредиштето на апликацијата е офлајн.
Конечно, поддршката за SOCKS транспорт не додава гаранции за достава на UDP. Сопствените тайм-аути на вашата апликација, ракувањето со загуби и ограничувањата на големината на пораките сè уште важат откако рутата ќе се смени.