Záporné čísla v Java SOCKS adrese nie sú záporné IP
Pri parsovaní polí SOCKS adresy pomocou Java byte API ich čítajte ako bezznakové hodnoty protokolu.
V Jave je byte znamienkový. Preto sa oktet s hodnotou 217 na drôte môže pri priamom výpise z poľa bajtov javiť ako záporná hodnota. Neznamená to, že proxy odoslala neplatnú zápornú IP adresu.
Preveďte uloženú hodnotu na bezznakové celé číslo, napríklad pomocou Byte.toUnsignedInt(value), alebo pri čítaní poľa použite DataInputStream.readUnsignedByte(). Pri porte v sieťovom poradí čítajte dokumentovanú dvojbajtovú hodnotu, namiesto toho, aby ste s niektorým z bajtov zaobchádzali ako so znamienkovým desatinným číslom.
Oddeľte tiež reprezentáciu od rámovania. Čítanie zo socketu môže vrátiť menej bajtov, než bolo požadovaných. Prečítajte celé pole a potom ho interpretujte podľa verzie SOCKS a typu adresy. Adresy SOCKS5 môžu obsahovať adresu IPv4, adresu IPv6 alebo doménové meno s dĺžkovým prefixom; pevný predpoklad štyroch bajtov pokrýva len jednu z týchto foriem.
Oprava oktetu, ktorý vyzerá záporne, vyrieši problém zobrazenia. Neopraví však parser, ktorý začal čítať na nesprávnom offsete alebo sa zastavil uprostred adresy.