A Java, byte té signe. Per tant, un octet amb valor de xarxa 217 pot aparèixer com a valor negatiu quan s'imprimeix directament des d'una matriu de bytes. Això no vol dir que el proxy hagi enviat una adreça IP negativa no vàlida.

Convertiu el valor desat en un enter sense signe, per exemple amb Byte.toUnsignedInt(value), o feu servir DataInputStream.readUnsignedByte() mentre llegiu el camp. Per a un port en ordre de xarxa, llegiu el valor de dos bytes documentat en lloc de tractar qualsevol dels bytes com un nombre decimal amb signe.

Separeu també la representació de l'emmarcament. Una lectura del sòcol pot retornar menys bytes dels sol·licitats. Llegiu el camp complet i després interpreteu-lo segons la versió de SOCKS i el tipus d'adreça. Les adreces SOCKS5 poden contenir una adreça IPv4, una adreça IPv6 o un nom de domini amb prefix de longitud; l'assumpció fixa de quatre bytes només cobreix una d'aquestes formes.

Corregir un octet que sembla negatiu resol el problema de visualització. No arregla un analitzador que ha començat a llegir a un desplaçament equivocat o s'ha aturat a mig camí de l'adreça.

Articles relacionats