Záporná čísla v Java SOCKS adrese nejsou záporné IP
Při parsování polí SOCKS adresy pomocí Java byte API je čtěte jako bezznaménkové hodnoty protokolu.
V Javě je byte znaménkový. Oktet s hodnotou 217 na drátě se proto může při přímém výpisu z pole bajtů jevit jako záporná hodnota. Neznamená to, že proxy odeslala neplatnou zápornou IP adresu.
Převeďte uloženou hodnotu na beznaménkové celé číslo, například pomocí Byte.toUnsignedInt(value), nebo při čtení pole použijte DataInputStream.readUnsignedByte(). U portu v síťovém pořadí čtěte dokumentovanou dvoubajtovou hodnotu, místo abyste s některým z bajtů zacházeli jako se znaménkovým desetinným číslem.
Oddělujte také reprezentaci od rámování. Čtení ze socketu může vrátit méně bajtů, než bylo požadováno. Přečtěte celé pole a poté jej interpretujte podle verze SOCKS a typu adresy. Adresy SOCKS5 mohou obsahovat adresu IPv4, adresu IPv6 nebo doménové jméno s délkovým prefixem; pevný předpoklad čtyř bajtů pokrývá jen jednu z těchto forem.
Oprava oktetu, který vypadá záporně, vyřeší problém zobrazení. Neopraví však parser, který začal číst na špatném offsetu nebo se zastavil uprostřed adresy.