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.

Artigos relacionados