Ένας σύνδεσμος με επίγνωση SOCKS για υποδοχές TCP της Python
Επιλέξτε έναν σύνδεσμο υποδοχής που κατανοεί το proxy και κρατήστε το εύρος του χωριστά από την υλοποίηση υποδοχών της Python σε επίπεδο διεργασίας.
Μια ακατέργαστη υποδοχή Python δεν διαπραγματεύεται proxy επειδή υπάρχει το http_proxy. Για μια εφαρμογή που μιλά το δικό της πρωτόκολλο TCP, χρησιμοποιήστε έναν σύνδεσμο που κατανοεί την υπηρεσία στο άκρο του proxy.
Με το PySocks ήδη διαθέσιμο, δημιουργήστε τη σύνδεση ρητά:
import socks
with socks.socksocket() as connection:
connection.set_proxy(socks.SOCKS5, '203.0.113.10', 1080)
connection.settimeout(10)
connection.connect(('example.com', 12345))
# Exchange the destination protocol here.
Αντικαταστήστε τη διεύθυνση τεκμηρίωσης και τη θύρα προορισμού. Για έναν επιτρεπόμενο δημόσιο προορισμό, επιλέξτε υποψήφιο από τη λίστα proxy SOCKS5 μόνο αφού ελέγξετε ότι επιτρέπει τη θύρα-στόχο της εφαρμογής. Ελέγξτε το εγκατεστημένο πακέτο, τις υποστηριζόμενες μεθόδους και τις απαιτήσεις του άκρου με βάση τη διεπαφή PySocks.
Το υπόλοιπο της εφαρμογής ανταλλάσσει το πρωτόκολλό του μέσω αυτής της εδραιωμένης σύνδεσης. Αν αυτό το πρωτόκολλο χρησιμοποιεί TLS, ξεκινήστε το μετά τη διαπραγμάτευση του proxy και επαληθεύστε το πραγματικό όνομα υποδοχής προορισμού. Η ταυτοποίηση proxy εδραιώνει τη διαδρομή· δεν παρέχει τη σύνδεση στον προορισμό ούτε την κρυπτογράφηση.
Ένας ακροατής SOCKS χρειάζεται διαπραγμάτευση SOCKS. Μια υπηρεσία HTTP χρειάζεται σύνδεσμο με δυνατότητα CONNECT για αυθαίρετο προορισμό TCP και μπορεί να αρνηθεί τη θύρα της. Επιλέξτε τον σύνδεσμο με βάση την υπηρεσία που προσφέρεται πραγματικά, αντί να αλλάζετε μια διεύθυνση αφήνοντας τη λάθος χειραψία.
Κρατήστε την αντικατάσταση τοπική. Η ανάθεση κλάσης στο socket.socket μπορεί να επηρεάσει άσχετες εισαγωγές και βιβλιοθήκες. Αν μια άλλη βιβλιοθήκη κατέχει τη δημιουργία υποδοχών, χρησιμοποιήστε το τεκμηριωμένο εργοστάσιο συνδέσεων ή την επιλογή proxy της· ένα λεξικό που δεν διαβάζει ποτέ δεν μπορεί να αλλάξει αυτή τη σύνδεση.