Η σύνδεση ενός TCP socket του Asio με έναν ακροατή SOCKS5 ολοκληρώνει ένα βήμα: τη σύνδεση TCP προς αυτόν τον ακροατή. Δεν ζητά από το proxy να συνδεθεί με τον τελικό διακομιστή. Για έναν επιτρεπόμενο έλεγχο δημόσιου στόχου, η λίστα proxy SOCKS5 προσφέρει υποψηφίους για αυτό το πρώτο TCP τελικό σημείο· ο συνδετήρας πρέπει ακόμη να εκτελέσει την ανταλλαγή παρακάτω.

Στη συνέχεια ο συνδετήρας SOCKS5 πρέπει να εκτελέσει την ανταλλαγή του πρωτοκόλλου:

  1. Στείλτε χαιρετισμό έκδοσης 5 που απαριθμεί τις μεθόδους ταυτοποίησης που υποστηρίζει ο πελάτης.
  2. Διαβάστε τη μέθοδο που επιλέχθηκε και εκτελέστε την ανταλλαγή ταυτοποίησής της όταν απαιτείται.
  3. Στείλτε CONNECT με τον τύπο διεύθυνσης του προορισμού, τη διεύθυνση και τη θύρα σε σειρά byte δικτύου.
  4. Διαβάστε την απάντηση, ελέγξτε την έκδοση και τον κωδικό αποτελέσματος, και καταναλώστε ολόκληρη τη δεσμευμένη διεύθυνση και θύρα μεταβλητού μήκους.
  5. Παραδώστε τη ροή που έχει εδραιωθεί στο πρωτόκολλο της εφαρμογής.

Ένας βοηθός με το όνομα socks5::async_proxy_connect ανήκει στην υλοποίηση SOCKS που παρέχει αυτόν τον βοηθό. Η αναφορά του δίπλα στο boost::asio δεν το κάνει μέρος της διεπαφής TCP socket του Asio.

Οι αναγνώσεις TCP μπορούν να επιστρέψουν μόνο μέρος μιας απάντησης. Συνθέστε αναγνώσεις για τους απαιτούμενους αριθμούς byte και έπειτα επιλέξτε το υπόλοιπο μήκος από το πεδίο τύπου διεύθυνσης. Μην υποθέτετε ότι κάθε απάντηση διακομιστή έχει τη σταθερή διάταξη IPv4.

Για HTTPS, εκτελέστε τη χειραψία TLS του προορισμού αφού πετύχει το SOCKS CONNECT, διατηρώντας το SNI και την επαλήθευση ονόματος κεντρικού υπολογιστή του προορισμού. Μια επιτυχημένη απάντηση proxy από μόνη της δεν ταυτοποιεί τον ιστότοπο.

Διατηρήστε την ακύρωση και τις προθεσμίες σε όλη την ακολουθία ρύθμισης. Αν λήξει ο χρόνος εγκατάστασης της σύνδεσης TCP, οι επόμενες ανταλλαγές χαιρετισμού, ταυτοποίησης και CONNECT μένουν χωρίς όριο.

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