Negativni brojevi u Java SOCKS adresi nisu negativne IP adrese
Čitajte polja SOCKS adrese kao neoznačene protokolne vrijednosti kada ih parsirate Java byte API-jima.
U Javi je byte označen. Zato se oktet čija je mrežna vrijednost 217 može prikazati kao negativna vrijednost kad se ispiše izravno iz polja bajtova. To ne znači da je proxy poslao nevažeću negativnu IP adresu.
Pretvorite pohranjenu vrijednost u neoznačeni cijeli broj, primjerice pomoću Byte.toUnsignedInt(value), ili upotrijebite DataInputStream.readUnsignedByte() dok čitate polje. Za port u mrežnom redoslijedu pročitajte dokumentiranu dvobajtnu vrijednost umjesto da bilo koji bajt tretirate kao označeni decimalni broj.
Odvojite i prikaz od uokvirivanja. Čitanje sa socketa može vratiti manje bajtova od zatraženih. Pročitajte cijelo polje, a zatim ga protumačite prema verziji SOCKS-a i vrsti adrese. SOCKS5 adrese mogu sadržavati IPv4 adresu, IPv6 adresu ili naziv domene s prefiksom duljine; fiksna pretpostavka od četiri bajta pokriva samo jedan od tih oblika.
Ispravljanje okteta koji izgleda negativno rješava problem prikaza. Ne ispravlja parser koji je počeo čitati na pogrešnom pomaku ili stao na pola adrese.