Permintaan sambungan SOCKS4 berjaya, tetapi aplikasi tidak pernah melihat sapaan pembukaan pelayan. Satu tempat untuk diperiksa ialah bacaan pertama penyambung. Bacaan enam belas bait terlalu besar untuk respons SOCKS4 lapan bait.

Medan responsBait
Medan versi respons1
Kod hasil1
Medan port2
Medan alamat4

Kod hasil 0x5a menunjukkan bahawa permintaan telah diluluskan. SOCKS4a mengubah cara permintaan membawa nama hos; ia tidak menjadikan respons itu enam belas bait.

Selepas respons, strim TCP yang sama membawa protokol destinasi. Pelayan mel mungkin menghantar sapaannya serta-merta. Oleh itu bacaan yang menggunakan enam belas bait tersedia boleh mengambil respons proksi yang lengkap serta lapan bait pertama sapaan itu. Jika belum ada apa-apa menyusul, bacaan penyekat yang terlalu besar sebaliknya boleh menambah penantian yang tidak perlu.

Panjang tepat ialah tanggungjawab penghurai

Meminta lapan bait sekali bukan bukti yang cukup bahawa lapan bait telah tiba. Bacaan strim boleh mengembalikan lebih sedikit. Kumpulkan panjang respons dengan tepat dalam had masa, berhenti pada strim tertutup atau gagal, periksa respons, dan tinggalkan bait berikutnya untuk aplikasi.

Jika penyambung menggunakan bacaan berpenimbal yang lebih besar, kekalkan segala-galanya selepas sempadan dan serahkannya kepada pengguna seterusnya. Membuang lebihan ialah kehilangan data yang sama dengan saiz bacaan berbeza.

SOCKS5 memerlukan penghurai sendiri. Panjang alamat responsnya boleh berbeza mengikut jenis alamat. Menggantikan setiap bacaan proksi dengan bacaan tetap lapan bait akan membaiki satu protokol sambil merosakkan yang lain.

Artikel berkaitan