Java DatagramSocket dan Geganti UDP SOCKS5
Fahami mengapa soket UDP Java memerlukan pelaksanaan SOCKS5 UDP walaupun sambungan TCP sudah menggunakan SOCKS.
Permintaan HTTP Java anda berfungsi melalui SOCKS, tetapi ciri UDP masih menghantar trafik secara terus atau gagal. Menetapkan sifat SOCKS JVM tidak memberikan DatagramSocket pelaksanaan SOCKS5 UDP.
API DatagramSocket menghantar dan menerima datagram yang dialamatkan kepada titik akhir rangkaian. Kaedah connect() memilih pasangan untuk soket itu. Ia tidak melakukan rundingan SOCKS dengan pasangan itu.
Laluan UDP SOCKS5 memerlukan kerja tambahan
SOCKS5 mentakrifkan persatuan UDP yang dibina di atas sambungan kawalan TCP. Klien kemudian menukar datagram terkapsul dengan alamat geganti yang diberikan oleh proksi. Setiap mesej terkapsul mengenal pasti destinasinya. Pelaksanaan klien perlu mengendalikan pembingkaian itu dan jangka hayat sambungan kawalan.
Menghalakan soket UDP biasa ke port mendengar TCP proksi melangkau langkah-langkah itu. Menghantar datagram mentah aplikasi anda ke alamat itu bukan pengganti persatuan itu.
Pilih pustaka atau ciri aplikasi yang menyokong geganti UDP SOCKS5 secara jelas, dan pastikan pelayan juga menyokongnya. Pustaka yang mengiklankan sokongan SOCKS mungkin hanya melaksanakan TCP CONNECT. Spesifikasi protokol membezakan arahan tersebut.
Geganti UDP juga memerlukan laluan yang boleh digunakan
Sambungan TCP yang berjaya ke proksi hanya membina laluan kawalan. Tembok api atau tingkah laku NAT masih boleh mengganggu datagram yang dihantar ke geganti. Kumpulkan titik akhir geganti yang dikembalikan dan sebarang ralat geganti sebelum membuat kesimpulan bahawa destinasi aplikasi berada di luar talian.
Akhir sekali, sokongan pengangkutan SOCKS tidak menambah jaminan penghantaran kepada UDP. Had masa aplikasi anda sendiri, pengendalian kehilangan dan kekangan saiz mesej masih terpakai selepas laluan berubah.