In Java is byte ondertekend. Een octet met de draadwaarde 217 kan daarom als een negatieve waarde verschijnen wanneer het rechtstreeks uit een byte-array wordt afgedrukt. Dat betekent niet dat de proxy een ongeldig negatief IP-adres heeft verzonden.

Converteer de opgeslagen waarde naar een niet-ondertekend geheel getal, bijvoorbeeld met Byte.toUnsignedInt(value), of gebruik DataInputStream.readUnsignedByte() tijdens het lezen van het veld. Lees voor een poort in netwerkvolgorde de gedocumenteerde tweebytewaarde in plaats van een van beide bytes als een ondertekend decimaal getal te behandelen.

Scheid ook de weergave van de framing. Een socket-leesbewerking kan minder bytes teruggeven dan opgevraagd. Lees het volledige veld en interpreteer het daarna volgens de SOCKS-versie en het adrestype. SOCKS5-adressen kunnen een IPv4-adres, een IPv6-adres of een domeinnaam met lengteprefix bevatten; de vaste aanname van vier bytes dekt slechts één van die vormen.

Een octet dat negatief lijkt corrigeren lost het weergaveprobleem op. Het repareert geen parser die op de verkeerde offset begon te lezen of halverwege het adres stopte.

Gerelateerde artikelen