Łącznik rozumiejący SOCKS dla gniazd TCP w Pythonie
Wybierz łącznik gniazd rozumiejący proxy i trzymaj jego zakres oddzielnie od implementacji gniazd obejmującej cały proces Pythona.
Surowe gniazdo Pythona nie negocjuje proxy tylko dlatego, że istnieje http_proxy. Dla aplikacji mówiącej własnym protokołem TCP użyj łącznika, który rozumie usługę na końcu proxy.
Gdy PySocks jest już dostępny, utwórz połączenie jawnie:
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.
Zastąp adres z dokumentacji i port docelowy. Dla dozwolonego publicznego celu wybierz kandydata z listy proxy SOCKS5 dopiero po sprawdzeniu, że zezwala na docelowy port aplikacji. Sprawdź zainstalowany pakiet, obsługiwane metody i wymagania punktu końcowego względem interfejsu PySocks.
Reszta aplikacji wymienia swój protokół przez to ustanowione połączenie. Jeśli ten protokół używa TLS, uruchom go po negocjacji proxy i zweryfikuj prawdziwą nazwę hosta docelowego. Uwierzytelnianie proxy ustanawia trasę; nie zapewnia logowania do celu ani szyfrowania.
Nasłuchiwacz SOCKS potrzebuje negocjacji SOCKS. Usługa HTTP potrzebuje łącznika obsługującego CONNECT dla dowolnego celu TCP i może odrzucić swój port. Wybierz łącznik odpowiedni do faktycznie oferowanej usługi, zamiast zmieniać adres, pozostawiając niewłaściwe uzgadnianie.
Utrzymuj zamianę lokalnie. Przypisanie klasy do socket.socket może wpłynąć na niepowiązane importy i biblioteki. Jeśli tworzeniem gniazd zarządza inna biblioteka, użyj jej udokumentowanej fabryki połączeń lub opcji proxy; słownik, którego nigdy nie czyta, nie może zmienić tego połączenia.