Negatīvi skaitļi Java SOCKS adresē nav negatīvas IP adreses
Lasiet SOCKS adreses laukus kā neapzīmētas protokola vērtības, kad tos parsējat ar Java byte API.
Java valodā byte ir ar zīmi. Tāpēc oktets, kura tīkla vērtība ir 217, var parādīties kā negatīva vērtība, ja to izdrukā tieši no baitu masīva. Tas nenozīmē, ka starpniekserveris nosūtīja nederīgu negatīvu IP adresi.
Pārvērtiet saglabāto vērtību par neapzīmētu veselu skaitli, piemēram, ar Byte.toUnsignedInt(value), vai izmantojiet DataInputStream.readUnsignedByte(), lasot lauku. Tīkla kārtas portam lasiet dokumentēto divu baitu vērtību, nevis uzskatiet jebkuru baitu par apzīmētu decimālo skaitli.
Nošķiriet arī attēlojumu no ietvarošanas. Lasīšana no ligzdas var atgriezt mazāk baitu, nekā pieprasīts. Izlasiet visu lauku, pēc tam interpretējiet to atbilstoši SOCKS versijai un adreses tipam. SOCKS5 adreses var saturēt IPv4 adresi, IPv6 adresi vai domēna vārdu ar garuma prefiksu; fiksēts četru baitu pieņēmums aptver tikai vienu no šīm formām.
Negatīvi izskata okteta labošana atrisina attēlošanas problēmu. Taču tā nelabo parseri, kas sāka lasīt nepareizā nobīdē vai apstājās adreses vidū.