Menghubungkan soket TCP Asio ke pendengar SOCKS5 menyelesaikan satu langkah: koneksi TCP ke pendengar itu. Ini tidak meminta proxy terhubung ke server akhir. Untuk pengujian target publik yang diizinkan, daftar proxy SOCKS5 menawarkan kandidat untuk titik akhir TCP pertama tersebut; konektor tetap harus menyelesaikan pertukaran di bawah ini.

Konektor SOCKS5 kemudian harus menjalankan pertukaran protokol:

  1. Kirim salam versi 5 yang mencantumkan metode autentikasi yang didukung klien.
  2. Baca metode yang dipilih dan lakukan pertukaran autentikasinya bila diperlukan.
  3. Kirim CONNECT dengan tipe alamat tujuan, alamat, dan port dalam urutan bita jaringan.
  4. Baca balasan, periksa versinya dan kode hasil, lalu konsumsi alamat terikat dan port lengkap dengan panjang variabel.
  5. Serahkan aliran yang terbentuk ke protokol aplikasi.

Pembantu bernama socks5::async_proxy_connect termasuk dalam implementasi SOCKS yang menyediakan pembantu tersebut. Menyebutnya di samping boost::asio tidak menjadikannya bagian dari antarmuka soket TCP Asio.

Pembacaan TCP dapat mengembalikan hanya sebagian balasan. Susun pembacaan untuk jumlah bita yang diperlukan, lalu pilih panjang sisanya dari bidang tipe alamat. Jangan menganggap setiap balasan server memiliki tata letak IPv4 yang tetap.

Untuk HTTPS, lakukan jabat tangan TLS tujuan setelah SOCKS CONNECT berhasil, sambil mempertahankan SNI dan verifikasi nama host tujuan. Balasan proxy yang berhasil saja tidak mengautentikasi situs web.

Pertahankan pembatalan dan tenggat waktu di seluruh urutan penyiapan. Jika waktu pembentukan koneksi TCP habis, pertukaran salam, autentikasi, dan CONNECT berikutnya tetap tanpa batas.

Artikel terkait