Java DatagramSocket και αναμετάδοση UDP μέσω SOCKS5
Κατανοήστε γιατί ένα UDP socket της Java χρειάζεται υλοποίηση SOCKS5 UDP ακόμη και όταν οι συνδέσεις TCP χρησιμοποιούν ήδη SOCKS.
Το αίτημα HTTP σε Java λειτουργεί μέσω SOCKS, αλλά μια λειτουργία UDP εξακολουθεί να στέλνει κίνηση απευθείας ή να αποτυγχάνει. Ο ορισμός των ιδιοτήτων SOCKS της JVM δεν δίνει στο DatagramSocket υλοποίηση SOCKS5 UDP.
Το API DatagramSocket στέλνει και λαμβάνει datagrams που απευθύνονται σε τελικά σημεία δικτύου. Η μέθοδος connect() επιλέγει έναν ομότιμο για αυτό το socket. Δεν εκτελεί διαπραγμάτευση SOCKS με τον ομότιμο.
Μια διαδρομή UDP μέσω SOCKS5 απαιτεί επιπλέον εργασία
Το SOCKS5 ορίζει μια συσχέτιση UDP που δημιουργείται μέσω σύνδεσης ελέγχου TCP. Στη συνέχεια ο πελάτης ανταλλάσσει ενθυλακωμένα datagrams με τη διεύθυνση αναμετάδοσης που παρέχει ο διαμεσολαβητής. Κάθε ενθυλακωμένο μήνυμα προσδιορίζει τον προορισμό του. Μια υλοποίηση πελάτη πρέπει να χειρίζεται αυτή την πλαισίωση και τη διάρκεια ζωής της σύνδεσης ελέγχου.
Η στόχευση ενός συνηθισμένου UDP socket στη θύρα ακρόασης TCP του διαμεσολαβητή παραλείπει αυτά τα βήματα. Η αποστολή των ακατέργαστων datagrams της εφαρμογής σας σε αυτή τη διεύθυνση δεν αντικαθιστά τη συσχέτιση.
Επιλέξτε μια βιβλιοθήκη ή λειτουργία εφαρμογής που υποστηρίζει ρητά αναμετάδοση UDP μέσω SOCKS5 και επιβεβαιώστε ότι την υποστηρίζει και ο διακομιστής. Μια βιβλιοθήκη που διαφημίζει υποστήριξη SOCKS μπορεί να υλοποιεί μόνο TCP CONNECT. Η προδιαγραφή του πρωτοκόλλου διακρίνει τις εντολές.
Η αναμετάδοση UDP χρειάζεται επίσης μια χρησιμοποιήσιμη διαδρομή
Μια επιτυχής σύνδεση TCP με τον διαμεσολαβητή δημιουργεί μόνο τη διαδρομή ελέγχου. Τα τείχη προστασίας ή η συμπεριφορά NAT μπορούν ακόμη να παρεμβάλλονται στα datagrams που στέλνονται στην αναμετάδοση. Συλλέξτε το τελικό σημείο αναμετάδοσης που επιστρέφεται και τυχόν σφάλμα αναμετάδοσης πριν συμπεράνετε ότι ο προορισμός της εφαρμογής είναι εκτός σύνδεσης.
Τέλος, η υποστήριξη μεταφοράς SOCKS δεν προσθέτει εγγυήσεις παράδοσης στο UDP. Τα δικά σας χρονικά όρια, η διαχείριση απωλειών και οι περιορισμοί μεγέθους μηνυμάτων εξακολουθούν να ισχύουν αφού αλλάξει η διαδρομή.