Όταν το Socket.Connect() δείχνει σε έναν διακομιστή SOCKS, ανοίγει μια σύνδεση TCP προς αυτόν τον διακομιστή. Τα επόμενα byte πρέπει ακόμη να μιλούν SOCKS. Η άμεση αποστολή του πρωτοκόλλου της εφαρμογής αφήνει τον διακομιστή να περιμένει άλλη συνομιλία.

Με το SOCKS5, η δημιουργία σύνδεσης περιλαμβάνει διαπραγμάτευση μεθόδου, τυχόν επιλεγμένη ανταλλαγή ταυτοποίησης και ένα αίτημα που ονομάζει τον προορισμό. Μόνο μια επιτυχής απάντηση ανοίγει τη διαδρομή για τα byte της εφαρμογής. Αυτά τα στάδια ορίζονται στο RFC 1928.

Κρατήστε τη διαπραγμάτευση στο επίπεδο σύνδεσης

Μια εφαρμογή με δικό της πρωτόκολλο TCP μπορεί να χρησιμοποιήσει έναν connector που γνωρίζει μεσολάβηση και επιστρέφει ένα εγκατεστημένο stream. Το υπόλοιπο της εφαρμογής διαβάζει και γράφει μέσω αυτού του stream. Ένας connector πρέπει να λαμβάνει υπόψη μερικές αναγνώσεις, διευθύνσεις μεταβλητού μήκους, αποτυχίες ταυτοποίησης και μια προθεσμία για τη διαπραγμάτευση.

Μια χειρόγραφη υλοποίηση που διαβάζει ένα buffer σταθερού μεγέθους και υποθέτει επιτυχία είναι εύθραυστη. Το TCP δεν διατηρεί τα όρια των μηνυμάτων SOCKS. Διαβάστε την πλήρη απάντηση που περιγράφεται από τον τύπο διεύθυνσής της πριν ξεκινήσετε το πρωτόκολλο της εφαρμογής. Ένας αναγνώστης απαντήσεων CONNECT .NET 7+ δείχνει αυτό το βήμα.

Αν μια συντηρούμενη βιβλιοθήκη παρέχει ήδη αυτό το επίπεδο σύνδεσης, ελέγξτε τις υποστηριζόμενες εκδόσεις SOCKS, τις μεθόδους ταυτοποίησης και το target framework της. Ένας σύνδεσμος φόρουμ δέκα ετών είναι σημείο εκκίνησης για έρευνα και όχι απόδειξη τρέχουσας συμβατότητας.

Η διαμόρφωση του HTTP client έχει ξεχωριστό πεδίο

Η ρύθμιση μεσολάβησης ενός HTTP client διαμορφώνει αυτόν τον HTTP client. Δεν τροποποιεί κάθε ακατέργαστο socket στη διεργασία. Το Socket API δέχεται ένα τελικό σημείο δικτύου και αφήνει τη διαπραγμάτευση υψηλότερου επιπέδου στον καλούντα.

Για ένα κρυπτογραφημένο πρωτόκολλο εφαρμογής, εκτελέστε τη χειραψία TLS του αφού εγκατασταθεί η σήραγγα μεσολάβησης. Επικυρώστε την ταυτότητα του επιδιωκόμενου προορισμού σε εκείνο το στάδιο. Η ταυτοποίηση μεσολάβησης και η ταυτοποίηση προορισμού παραμένουν χωριστές παρόλο που χρησιμοποιούν το ίδιο υποκείμενο stream.

Σχετικά άρθρα