Os números negativos nun enderezo SOCKS de Java non son IP negativas
Lea os campos do enderezo SOCKS como valores de protocolo sen signo ao analizalos coas API de bytes de Java.
En Java, byte ten signo. Por iso, un octeto cuxo valor na rede é 217 pode aparecer como valor negativo cando se imprime directamente desde un array de bytes. Iso non significa que o proxy enviase un enderezo IP negativo non válido.
Converte o valor almacenado nun enteiro sen signo, por exemplo con Byte.toUnsignedInt(value), ou usa DataInputStream.readUnsignedByte() mentres les o campo. Para un porto en orde de rede, le o valor de dous bytes documentado en lugar de tratar calquera dos bytes como un número decimal con signo.
Separa tamén a representación do enmarcado. Unha lectura do socket pode devolver menos bytes dos solicitados. Le o campo completo e despois interprétao segundo a versión de SOCKS e o tipo de enderezo. Os enderezos SOCKS5 poden conter un enderezo IPv4, un enderezo IPv6 ou un nome de dominio con prefixo de lonxitude; a suposición fixa de catro bytes só cobre unha desas formas.
Corrixir un octeto que parece negativo resolve o problema de visualización. Non arranxa un analizador que comezou a ler nun desprazamento incorrecto ou parou a metade do enderezo.