I Java er byte signert. En oktett med trådverdien 217 kan derfor fremstå som en negativ verdi når den skrives ut direkte fra en byte-array. Det betyr ikke at proxien sendte en ugyldig negativ IP-adresse.

Konverter den lagrede verdien til et usignert heltall, for eksempel med Byte.toUnsignedInt(value), eller bruk DataInputStream.readUnsignedByte() mens du leser feltet. For en port i nettverksrekkefølge leser du den dokumenterte to-byte-verdien i stedet for å behandle en av bytene som et signert desimaltall.

Skill også representasjon fra innramming. En socket-lesing kan returnere færre byte enn forespurt. Les hele feltet, og tolk det deretter etter SOCKS-versjon og adressetype. SOCKS5-adresser kan inneholde en IPv4-adresse, en IPv6-adresse eller et domenenavn med lengdeprefiks; en fast antagelse om fire byte dekker bare én av disse formene.

Å rette en oktett som ser negativ ut løser visningsproblemet. Det retter ikke en parser som begynte å lese på feil offset eller stoppet midt i adressen.

Relaterte artikler