Ένα μέτωπο SOCKS5 μπορεί να χρησιμοποιεί ένα διακομιστή μεσολάβησης HTTP ως μεταφορέα προς τα εμπρός. Λειτουργεί ως διακομιστής SOCKS προς τον πελάτη και ως πελάτης HTTP CONNECT προς τον γονέα. Οι δύο ανταλλαγές ελέγχου τελειώνουν πριν αρχίσει η ροή της εφαρμογής.

Το αίτημα SOCKS CONNECT παρέχει ήδη τον κεντρικό υπολογιστή ή τη διεύθυνση προορισμού και τη θύρα. Για μια ενδεικτική ανταλλαγή HTTP/1.1 με τον γονέα:

client → adapter: SOCKS5 CONNECT service.example.net:443
adapter → parent:
    CONNECT service.example.net:443 HTTP/1.1
    Host: service.example.net:443

parent → adapter: HTTP/1.1 200 Connection Established
                 [end of headers]
adapter → client: SOCKS5 success reply

client ↔ adapter ↔ parent ↔ service: application bytes

Μεταφράστε το αποτέλεσμα στο όριο

Ο προσαρμογέας ολοκληρώνει οποιαδήποτε απαιτούμενη ταυτοποίηση στον γονέα και περιμένει το αποτέλεσμα του CONNECT. Μια επιτυχής απάντηση 2xx εγκαθιστά τη σήραγγα προς τον γονέα. Μόνο τότε πρέπει να επιστρέψει την αντίστοιχη απάντηση επιτυχίας SOCKS στον πελάτη προς τα κάτω.

Αν ο γονέας απορρίψει τη λειτουργία, στείλτε μια καθορισμένη απάντηση αποτυχίας SOCKS και μετά τερματίστε αμέσως τη σύνδεση του πελάτη. Το SOCKS5 απαιτεί αυτό το κλείσιμο εντός δέκα δευτερολέπτων από την ανίχνευση της αποτυχίας. Κρατήστε την κατάσταση HTTP του γονέα ως διαγνωστική πληροφορία για τον προσαρμογέα. Η προώθηση αυτής της γραμμής κατάστασης ως δεδομένων εφαρμογής θα έβαζε ένα μήνυμα ελέγχου HTTP σε μια ροή της οποίας ο πελάτης περιμένει πλαισίωση SOCKS.

Πριν από ένα επιτυχές αποτέλεσμα CONNECT, ο γονέας μιλά ακόμη HTTP, συμπεριλαμβανομένης της πλαισίωσης οποιασδήποτε απάντησης πρόκλησης ή σφάλματος. Μετά τον διαχωριστή κεφαλίδων ενός επιτυχούς αποτελέσματος, η σύνδεση γίνεται η σήραγγα· δεν υπάρχει σώμα απάντησης HTTP για κατανάλωση πρώτα.

Διατηρήστε τα byte μετά τις κεφαλίδες

Μια ανάγνωση μπορεί να περιέχει το τέλος των κεφαλίδων του γονέα και byte από τον προορισμό μαζί. Κρατήστε αυτά τα επιπλέον byte για την εφαρμογή προς τα κάτω. Τα πρωτόκολλα όπου ο διακομιστής μιλά πρώτος μπορούν να χαιρετήσουν αμέσως μόλις ανοίξει η σύνδεσή τους.

Αφού σταλεί η απάντηση επιτυχίας SOCKS, προωθήστε τη ροή της εφαρμογής και προς τις δύο κατευθύνσεις. Ο προσαρμογέας δεν χρειάζεται να εναλλάσσει ένα μήνυμα πελάτη με ένα μήνυμα διακομιστή και δεν χρειάζεται να κατανοεί εγγραφές TLS για να τις προωθήσει. Η εργασία του στο πρωτόκολλο ήταν να εγκαθιδρύσει και να μεταφράσει τις δύο διαπραγματεύσεις σήραγγας.

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