Verbindung über einen Proxy mit Python

Das PySocks Modul ermöglicht es in Python Verbindungen über einen Proxy aufzubauen. Im folgenden Artikel wird kurz gezeigt wie dies Funktioniert.

Es gibt verschiedene Gründe, warum eine Verbindung über einen Proxy aufgebaut werden sollte/muss. Wird zum Beispiel wie folgt ein Tunnel mit SSH aufgebaut, steht anschließend ein SOCKS Proxy auf Port 8080 zur Verfügung.

$ ssh -D 8080 example.org

Damit eine Verbindung über diesen Proxy aufgebaut werden kann, wird für Python ein zusätzliches Modul wie zum Beispiel PySocks benötigt. Dieses Modul ist zum jetzigen Zeitpunkt für Python >= 2.6 und 3.x verfügbar und kann wie folgt installiert werden.

$ pip install PySocks

Anschließend kann eine Verbindung über den Proxy aufgebaut werden.

Alle Beispiele wurden mit Python 3.5 getestet.

import socks

s = socks.socksocket() # Same API as socket.socket in the standard lib

s.set_proxy(socks.SOCKS5, "localhost", 8080)

s.connect(("example.com", 80))

s.sendall(b"GET / HTTP/1.0\r\n\r\n")
print(s.recv(4096))

Es ist auch möglich die Standard Socket Funktionen direkt durch eine Verbindung über den Proxy zu ersetzen.

Dieses Vorgehen sollte prinzipiell funktionieren. Es kann jedoch sein, dass sich diese Funktionalität nicht auf alle Standard Bibliotheken auswirkt oder es zu unerwarteten Nebenwirkungen kommt.

import socket

import socks

socks.set_default_proxy(socks.SOCKS5, "localhost", 8080)
socket.socket = socks.socksocket

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("example.com", 80))

s.sendall(b"GET / HTTP/1.0\r\n\r\n")
print(s.recv(4096))

Verwandte Artikel