Οι αρνητικοί αριθμοί σε μια διεύθυνση SOCKS της Java δεν είναι αρνητικές IP
Διαβάστε τα πεδία της διεύθυνσης SOCKS ως ανυπόγραφες τιμές πρωτοκόλλου όταν τα αναλύετε με τα byte API της Java.
Στη Java το byte είναι προσημασμένο. Ένα οκτέτο με τιμή δικτύου 217 μπορεί επομένως να εμφανιστεί ως αρνητική τιμή όταν εκτυπώνεται απευθείας από έναν πίνακα byte. Αυτό δεν σημαίνει ότι ο διαμεσολαβητής έστειλε μη έγκυρη αρνητική διεύθυνση IP.
Μετατρέψτε την αποθηκευμένη τιμή σε ανυπόγραφο ακέραιο, για παράδειγμα με Byte.toUnsignedInt(value), ή χρησιμοποιήστε DataInputStream.readUnsignedByte() κατά την ανάγνωση του πεδίου. Για θύρα σε σειρά δικτύου, διαβάστε τη τεκμηριωμένη τιμή δύο byte αντί να αντιμετωπίζετε οποιοδήποτε από τα byte ως προσημασμένο δεκαδικό αριθμό.
Διαχωρίστε επίσης την αναπαράσταση από την πλαισίωση. Μια ανάγνωση υποδοχής μπορεί να επιστρέψει λιγότερα byte από όσα ζητήθηκαν. Διαβάστε ολόκληρο το πεδίο και μετά ερμηνεύστε το σύμφωνα με την έκδοση SOCKS και τον τύπο διεύθυνσης. Οι διευθύνσεις SOCKS5 μπορούν να περιέχουν διεύθυνση IPv4, διεύθυνση IPv6 ή όνομα τομέα με πρόθεμα μήκους· η σταθερή παραδοχή των τεσσάρων byte καλύπτει μόνο μία από αυτές τις μορφές.
Η διόρθωση ενός οκτέτου που φαίνεται αρνητικό λύνει το πρόβλημα εμφάνισης. Δεν διορθώνει έναν αναλυτή που άρχισε να διαβάζει σε λάθος μετατόπιση ή σταμάτησε στη μέση της διεύθυνσης.