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.

Powiązane artykuły