Negativa tal i en Java SOCKS-adress är inte negativa IP-adresser
Läs SOCKS-adressfält som teckenlösa protokollvärden när du tolkar dem med Javas byte-API:er.
I Java är byte teckenförsett. En oktett med trådvärdet 217 kan därför visas som ett negativt värde när den skrivs ut direkt från en byte-array. Det betyder inte att proxyn skickade en ogiltig negativ IP-adress.
Konvertera det lagrade värdet till ett teckenlöst heltal, till exempel med Byte.toUnsignedInt(value), eller använd DataInputStream.readUnsignedByte() när du läser fältet. För en port i nätverksordning läser du det dokumenterade tvåbytesvärdet i stället för att behandla någon av byten som ett teckenförsett decimaltal.
Separera också representationen från inramningen. En socket-läsning kan returnera färre byte än vad som begärdes. Läs hela fältet och tolka det sedan enligt SOCKS-version och adresstyp. SOCKS5-adresser kan innehålla en IPv4-adress, en IPv6-adress eller ett domännamn med längdprefix; antagandet om fyra byte täcker bara en av dessa former.
Att rätta en oktett som ser negativ ut löser visningsproblemet. Det rättar inte en parser som började läsa på fel offset eller stannade mitt i adressen.