Java DatagramSocket ve SOCKS5 UDP Aktarımı
TCP bağlantıları zaten SOCKS kullansa bile Java UDP soketinin neden bir SOCKS5 UDP uygulamasına ihtiyaç duyduğunu anlayın.
Java HTTP isteğiniz SOCKS üzerinden çalışır, ancak bir UDP özelliği trafiği hâlâ doğrudan gönderir veya başarısız olur. JVM'nin SOCKS özelliklerini ayarlamak DatagramSocket için bir SOCKS5 UDP uygulaması sağlamaz.
DatagramSocket API ağ uç noktalarına adreslenmiş veri birimlerini gönderir ve alır. connect() yöntemi bu soket için bir eş seçer. Eş ile bir SOCKS görüşmesi gerçekleştirmez.
SOCKS5 UDP rotası ek iş gerektirir
SOCKS5, bir TCP denetim bağlantısı üzerinden kurulan bir UDP ilişkilendirmesi tanımlar. Ardından istemci, vekilin sağladığı aktarım adresiyle kapsüllenmiş veri birimlerini değiş tokuş eder. Her kapsüllenmiş ileti hedefini belirtir. İstemci uygulaması bu çerçevelemeyi ve denetim bağlantısının ömrünü yönetmelidir.
Sıradan bir UDP soketini vekilin TCP dinleme bağlantı noktasına yöneltmek bu adımları atlar. Uygulamanızın ham veri birimlerini o adrese göndermek ilişkilendirmenin yerini tutmaz.
SOCKS5 UDP aktarımını açıkça destekleyen bir kitaplık veya uygulama özelliği seçin ve sunucunun da bunu desteklediğini doğrulayın. SOCKS desteği sunduğunu belirten bir kitaplık yalnızca TCP CONNECT uygulayabilir. Protokol belirtimi bu komutları birbirinden ayırır.
UDP aktarımı için de kullanılabilir bir yol gerekir
Vekile yapılan başarılı bir TCP bağlantısı yalnızca denetim yolunu kurar. Güvenlik duvarları veya NAT davranışı aktarıma gönderilen veri birimlerini yine de engelleyebilir. Uygulamanın hedefinin çevrimdışı olduğu sonucuna varmadan önce döndürülen aktarım uç noktasını ve varsa aktarım hatasını toplayın.
Son olarak, SOCKS taşıma desteği UDP'ye teslim garantisi eklemez. Yol değiştikten sonra da uygulamanızın kendi zaman aşımları, kayıp işleme ve ileti boyutu kısıtlamaları geçerlidir.