Java DatagramSocket dan Relai UDP SOCKS5
Pahami mengapa socket UDP Java memerlukan implementasi SOCKS5 UDP meskipun koneksi TCP sudah memakai SOCKS.
Permintaan HTTP Java Anda berjalan melalui SOCKS, tetapi fitur UDP masih mengirim lalu lintas secara langsung atau gagal. Menyetel properti SOCKS JVM tidak memberi DatagramSocket implementasi SOCKS5 UDP.
API DatagramSocket mengirim dan menerima datagram yang dialamatkan ke titik akhir jaringan. Metode connect() memilih pasangan untuk socket itu. Metode itu tidak melakukan negosiasi SOCKS dengan pasangannya.
Rute UDP SOCKS5 membutuhkan kerja tambahan
SOCKS5 mendefinisikan asosiasi UDP yang dibangun di atas koneksi kontrol TCP. Klien kemudian menukar datagram terbungkus dengan alamat relai yang diberikan proxy. Setiap pesan terbungkus menyebutkan tujuannya. Implementasi klien harus menangani pembingkaian itu dan masa hidup koneksi kontrol.
Mengarahkan socket UDP biasa ke porta pendengar TCP proxy melewati langkah-langkah itu. Mengirim datagram mentah aplikasi Anda ke alamat itu bukan pengganti asosiasi.
Pilih pustaka atau fitur aplikasi yang secara eksplisit mendukung relai UDP SOCKS5, dan pastikan server juga mendukungnya. Pustaka yang mengiklankan dukungan SOCKS mungkin hanya menerapkan TCP CONNECT. Spesifikasi protokol membedakan perintah-perintah itu.
Relai UDP juga membutuhkan jalur yang dapat dipakai
Koneksi TCP yang berhasil ke proxy hanya membangun jalur kontrol. Firewall atau perilaku NAT masih dapat mengganggu datagram yang dikirim ke relai. Kumpulkan titik akhir relai yang dikembalikan dan setiap kesalahan relai sebelum menyimpulkan bahwa tujuan aplikasi sedang offline.
Terakhir, dukungan transport SOCKS tidak menambah jaminan pengiriman pada UDP. Batas waktu aplikasi Anda sendiri, penanganan kehilangan, dan batasan ukuran pesan tetap berlaku setelah rute berubah.