Di Java, byte bertanda. Karena itu, oktet yang nilai jaringannya 217 dapat muncul sebagai nilai negatif saat dicetak langsung dari array byte. Itu tidak berarti proxy mengirim alamat IP negatif yang tidak valid.

Ubah nilai tersimpan menjadi bilangan bulat tanpa tanda, misalnya dengan Byte.toUnsignedInt(value), atau gunakan DataInputStream.readUnsignedByte() saat membaca bidang tersebut. Untuk port dalam urutan jaringan, baca nilai dua byte yang didokumentasikan alih-alih memperlakukan salah satu byte sebagai bilangan desimal bertanda.

Pisahkan juga representasi dari pembingkaian. Pembacaan soket bisa mengembalikan lebih sedikit byte daripada yang diminta. Baca seluruh bidang, lalu tafsirkan sesuai versi SOCKS dan jenis alamat. Alamat SOCKS5 dapat berisi alamat IPv4, alamat IPv6, atau nama domain dengan awalan panjang; asumsi tetap empat byte hanya mencakup salah satu bentuk tersebut.

Memperbaiki oktet yang tampak negatif menyelesaikan masalah tampilan. Itu tidak memperbaiki parser yang mulai membaca pada offset yang salah atau berhenti di tengah alamat.

Artikel terkait