Numerele negative dintr-o adresă SOCKS Java nu sunt IP-uri negative
Citiți câmpurile adresei SOCKS ca valori de protocol fără semn atunci când le analizați cu API-urile byte din Java.
În Java, byte este cu semn. Prin urmare, un octet a cărui valoare pe rețea este 217 poate apărea ca valoare negativă atunci când este tipărit direct dintr-un tablou de octeți. Aceasta nu înseamnă că proxy-ul a trimis o adresă IP negativă invalidă.
Convertiți valoarea stocată într-un întreg fără semn, de exemplu cu Byte.toUnsignedInt(value), sau folosiți DataInputStream.readUnsignedByte() în timp ce citiți câmpul. Pentru un port în ordine de rețea, citiți valoarea de doi octeți documentată în loc să tratați oricare dintre octeți ca număr zecimal cu semn.
Separați și reprezentarea de încadrare. O citire din socket poate returna mai puțini octeți decât s-au cerut. Citiți câmpul complet, apoi interpretați-l conform versiunii SOCKS și tipului adresei. Adresele SOCKS5 pot conține o adresă IPv4, o adresă IPv6 sau un nume de domeniu cu prefix de lungime; presupunerea fixă de patru octeți acoperă doar una dintre aceste forme.
Corectarea unui octet care pare negativ rezolvă problema de afișare. Nu repară însă un parser care a început să citească la un offset greșit sau s-a oprit la jumătatea adresei.