В Java byte е със знак. Затова октет със стойност в мрежата 217 може да се покаже като отрицателна стойност, когато се отпечата директно от байтов масив. Това не означава, че проксито е изпратило невалиден отрицателен IP адрес.

Преобразувайте запазената стойност в беззнаково цяло число, например с Byte.toUnsignedInt(value), или използвайте DataInputStream.readUnsignedByte(), докато четете полето. За порт в мрежов ред четете документираната двубайтова стойност, вместо да третирате който и да е от байтовете като десетично число със знак.

Отделяйте също представянето от рамкирането. Четенето от сокет може да върне по-малко байтове от заявеното. Прочетете цялото поле, след което го интерпретирайте според версията на SOCKS и типа на адреса. SOCKS5 адресите могат да съдържат IPv4 адрес, IPv6 адрес или име на домейн с префикс за дължина; фиксираното допускане за четири байта покрива само една от тези форми.

Коригирането на октет, който изглежда отрицателен, решава проблема с показването. То не поправя парсер, който е започнал да чете от грешно отместване или е спрял по средата на адреса.

Подобни статии