Alamat proxy yang valid tidak membuat pesan SOCKS tulisan tangan menjadi valid. Mengirim struct C atau C++ dapat mengirim padding atau bilangan bulat dalam urutan host yang tidak pernah diminta protokol.

Untuk permintaan SOCKS5 CONNECT dengan nama domain, serialkan urutan ini secara eksplisit setelah negosiasi metode dan autentikasi apa pun yang dipilih:

  1. Versi, perintah, byte cadangan, dan jenis alamat
  2. Panjang domain dan byte domain
  3. Port tujuan dua byte dalam urutan byte jaringan

Panjang alamat bergantung pada versi SOCKS dan jenis alamat. Bidang numerik berlebar tetap memerlukan representasi yang ditentukan; string domain memiliki pengodean panjangnya sendiri. Terminator string C bukan instruksi umum untuk menambahkan nol ke pesan kabel.

Jalan pintas implementasiMasalah yang perlu diperiksa
Menetapkan nilai 32-bit melalui pointer 8-bitIni tidak mengeluarkan keempat byte
Meng-cast buffer ke pointer bilangan bulat yang lebih besarPerataan dan urutan byte masih perlu ditangani
Menganggap satu baca atau tulis adalah satu pesanTCP hanya dapat mentransfer sebagian urutan protokol

Bandingkan setiap bidang dengan tujuan yang dimaksudkan dan tangani I/O parsial. Menerima dua byte tidak membuktikan bahwa seluruh balasan telah tiba. Memeriksa batas-batas itu dapat membedakan permintaan yang cacat dari server yang menolak koneksi yang dijelaskan dengan benar.

Artikel terkait