U Javi je byte označen. Zato se oktet čija je mrežna vrijednost 217 može prikazati kao negativna vrijednost kada se ispiše direktno iz niza bajtova. To ne znači da je proxy poslao nevažeću negativnu IP adresu.

Pretvorite pohranjenu vrijednost u neoznačeni cijeli broj, na primjer pomoću Byte.toUnsignedInt(value), ili koristite 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 soketa može vratiti manje bajtova od traženog. Pročitajte cijelo polje, pa ga tumačite prema verziji SOCKS-a i tipu adrese. SOCKS5 adrese mogu sadržavati IPv4 adresu, IPv6 adresu ili ime domene s prefiksom dužine; 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 s pogrešnog pomaka ili stao na pola adrese.

Povezani članci