Негативните броеви во Java SOCKS адреса не се негативни IP
Читајте ги полињата на SOCKS адресата како беззнаковни протоколни вредности кога ги парсирате со Java byte API.
Во Java, byte е со знак. Затоа октетот чија мрежна вредност е 217 може да се прикаже како негативна вредност кога се печати директно од низа бајти. Тоа не значи дека проксито испратило невалидна негативна IP адреса.
Претворете ја зачуваната вредност во беззнаков цел број, на пример со Byte.toUnsignedInt(value), или користете DataInputStream.readUnsignedByte() додека го читате полето. За порта во мрежен ред, прочитајте ја документираната двобајтна вредност наместо да третирате кој било бајт како децимален број со знак.
Одвојте го и приказот од врамувањето. Читањето од сокет може да врати помалку бајти од побараното. Прочитајте го целото поле, потоа протолкувајте го според верзијата на SOCKS и типот на адресата. SOCKS5 адресите можат да содржат IPv4 адреса, IPv6 адреса или име на домен со префикс за должина; фиксната претпоставка од четири бајти покрива само еден од тие облици.
Исправувањето на октет што изгледа негативно го решава проблемот со приказот. Но не го поправа парсерот што почнал да чита од погрешна позиција или застанал на средина од адресата.