A Java-ban a byte előjeles. Ezért egy 217-es átviteli értékű oktett negatív értékként jelenhet meg, ha közvetlenül egy byte-tömbből írjuk ki. Ez nem jelenti azt, hogy a proxy érvénytelen negatív IP-címet küldött.

Alakítsa a tárolt értéket előjel nélküli egésszé, például a Byte.toUnsignedInt(value) használatával, vagy használja a DataInputStream.readUnsignedByte() metódust a mező olvasásakor. Hálózati sorrendű port esetén a dokumentált kétbájtos értéket olvassa, ne kezelje a bájtok egyikét sem előjeles tizedes számként.

Válassza szét a megjelenítést a keretezéstől is. Egy socket-olvasás kevesebb bájtot adhat vissza a kértnél. Olvassa be a teljes mezőt, majd értelmezze a SOCKS verziója és a cím típusa szerint. A SOCKS5-címek IPv4-címet, IPv6-címet vagy hosszelőtaggal ellátott tartománynevet tartalmazhatnak; a rögzített négybájtos feltevés csak ezek egyikét fedi le.

A negatívnak látszó oktett kijavítása megoldja a megjelenítési problémát. Nem javítja viszont azt az elemzőt, amely rossz eltolásnál kezdett olvasni, vagy félúton megállt a címben.

Kapcsolódó cikkek