Números negativos num endereço SOCKS Java não são IPs negativos
Leia os campos do endereço SOCKS como valores de protocolo sem sinal ao analisá-los com as APIs de byte do Java.
Em Java, byte tem sinal. Por isso, um octeto cujo valor na rede é 217 pode aparecer como valor negativo quando é impresso diretamente de um array de bytes. Isso não significa que o proxy enviou um endereço IP negativo inválido.
Converta o valor armazenado em inteiro sem sinal, por exemplo com Byte.toUnsignedInt(value), ou use DataInputStream.readUnsignedByte() ao ler o campo. Para uma porta em ordem de rede, leia o valor de dois bytes documentado em vez de tratar qualquer um dos bytes como um número decimal com sinal.
Separe também a representação do enquadramento. Uma leitura do socket pode devolver menos bytes do que o solicitado. Leia o campo completo e depois interprete-o conforme a versão do SOCKS e o tipo de endereço. Endereços SOCKS5 podem conter um endereço IPv4, um endereço IPv6 ou um nome de domínio com prefixo de comprimento; a suposição fixa de quatro bytes cobre apenas uma dessas formas.
Corrigir um octeto que parece negativo resolve o problema de exibição. Não corrige um analisador que começou a ler no deslocamento errado ou parou no meio do endereço.