← Zurück zum Blog

SOCKS5 vs SOCKS5h: DNS-Anfrage-Leck in Python, curl und Selenium beheben

Wir erklären, warum bei der Arbeit mit SOCKS5 DNS-Anfragen direkt von Ihrer IP gesendet werden, was der Unterschied zwischen SOCKS5 und SOCKS5h ist und wie man diese Lücke in Python, curl, Selenium und Anti-Detect-Browsern schließt.

📅30. Oktober 2026

Sie haben einen SOCKS5-Proxy eingerichtet, der Verkehr scheint darüber zu laufen, die IP wird im Browser korrekt angezeigt – aber die Websites erkennen trotzdem Ihre echte Region oder der Anbieter beginnt, etwas Verdächtiges zu bemerken. Der Grund ist fast immer derselbe: DNS-Anfragen werden direkt von Ihrem Computer gesendet, ohne den Proxy zu nutzen. In diesem Artikel werden wir untersuchen, warum das passiert, wie sich SOCKS5 von SOCKS5h unterscheidet und wie man dieses Leck im Code und in fertigen Tools schließt.

Was ist SOCKS5 und wie unterscheidet es sich von SOCKS5h

SOCKS5 ist ein Proxy-Protokoll, das auf der Ebene von TCP/UDP-Verbindungen arbeitet und den Inhalt von Paketen nicht analysiert, im Gegensatz zu HTTP(S)-Proxys. Das macht es universell: Über SOCKS5 kann fast jeder Verkehr proxifiziert werden – Browser, Telegram, Torrent-Client, Skript in Python. Aber die klassische Implementierung von SOCKS5 hat eine wichtige Besonderheit: Die Auflösung von Domainnamen (DNS) erfolgt standardmäßig auf der Client-Seite, also auf Ihrem Computer, und nicht auf der Seite des Proxy-Servers.

SOCKS5h ist dasselbe Protokoll, aber mit dem Modifikator „h“ (Hostname), der der Client-Anwendung anzeigt, dass sie die Domain nicht selbst auflösen, sondern sie unverändert an den Proxy-Server senden soll, der dann die DNS-Anfrage in seinem Namen ausführt. Der Unterschied liegt in einem Buchstaben, aber die Auswirkungen auf die Anonymität und die Stabilität der Arbeit sind grundlegend.

Es ist wichtig zu verstehen: SOCKS5h ist kein separates Protokoll, sondern eine Vereinbarung auf der Ebene einer bestimmten Bibliothek oder Anwendung darüber, wie eine Anfrage an den Proxy zu formulieren ist. Der Proxy-Server funktioniert in beiden Fällen gleich, der Unterschied besteht nur darin, wer die DNS-Auflösung initiiert – der Client oder der Server.

Warum umgehen DNS-Anfragen den Proxy

Wenn Sie auf eine Adresse wie https://example.com zugreifen, muss die Anwendung vor dem Herstellen der Verbindung die IP-Adresse dieser Domain ermitteln. Dieser Prozess wird DNS-Auflösung genannt. Bei der Verwendung eines normalen SOCKS5 führen viele Bibliotheken und Systemeinstellungen die Auflösung über den systemeigenen DNS-Server durch – den, der in den Netzwerkeinstellungen Ihres Anbieters oder Routers eingetragen ist.

Infolgedessen ergibt sich eine paradoxe Situation: Der gesamte HTTP/TCP-Verkehr läuft über den Proxy und sieht so aus, als käme die Anfrage von der IP des Proxy-Servers, während die DNS-Anfrage „Welche IP hat example.com?“ direkt von Ihrer echten IP an den DNS-Server des Anbieters gesendet wird. Das ist das DNS-Leck (DNS leak). Eine Website oder ein Dienst, der die Netzwerkaktivität auf einer tieferen Ebene analysiert (und solche Erkennungsmethoden verwenden Anti-Betrugs-Systeme wie Facebook, Google, TikTok aktiv), kann eine Diskrepanz zwischen der IP der Verbindung und der Quelle der DNS-Anfrage feststellen.

Der Grund dafür ist, dass das SOCKS5-Protokoll ursprünglich als Transportschicht für bereits bestehende IP-Verbindungen entwickelt wurde und nicht für die Auflösung von Namen. Die Entwickler von Bibliotheken und Tools mussten die Funktion zur Übertragung von DNS-Anfragen durch das Tunnel separat implementieren – daher entstand SOCKS5h als eindeutiger Hinweis „Auflöse die Domain selbst, nicht ich“.

Warum ist ein DNS-Leck in der Praxis gefährlich

Für den Entwickler eines Parsers oder eines Automatisierungsskripts ist ein DNS-Leck keine abstrakte Theorie, sondern ein konkreter Grund für Sperrungen und Kontosperrungen. Lassen Sie uns einige Szenarien durchgehen.

Parsing von Marktplätzen und Websites. Wenn Sie Wildberries, Ozon oder eine andere Ressource über einen Proxy aus der gewünschten Region parsen, aber die DNS-Anfragen über den Anbieter laufen, kann das Anti-Bot-System eine Diskrepanz in der Geolokalisierung feststellen und das Verdachtsniveau der Sitzung erhöhen – bis hin zu Captchas oder vorübergehender Sperrung der Proxy-IP.

Multi-Accounting und Traffic-Arbitrage. Bei der Arbeit mit Facebook Ads, TikTok Ads oder Google Ads über mehrere Konten analysieren Anti-Betrugs-Systeme Dutzende von Parametern, einschließlich des DNS-Fingerabdrucks. Wenn die DNS-Anfragen mehrerer „verschiedener“ Konten plötzlich über denselben DNS-Server des Anbieters laufen, ist das ein Signal, die Konten zu einem Cluster zusammenzuführen – und in der Folge eine Kette von Sperrungen (chain-ban).

Automatisierung in Selenium/Playwright. Skripte, die Benutzeraktionen im Browser emulieren, sind besonders anfällig: Der Browser selbst kann DNS über die Systemeinstellungen des Betriebssystems auflösen und dabei den nur für HTTP-Verkehr angegebenen Proxy ignorieren. Infolgedessen gibt der gesamte andere Netzwerk-Fingerabdruck den echten Standort preis.

Für die meisten dieser Aufgaben ist es entscheidend, residential Proxys mit korrekt konfigurierter DNS-Auflösung auf der Serverseite zu verwenden – das verringert das Risiko einer Erkennung durch Netzwerkzeichen erheblich.

Wie man überprüft, ob ein DNS-Leck vorliegt

Bevor Sie das Problem beheben, sollten Sie sicherstellen, dass es tatsächlich vorhanden ist. Hier sind einige schnelle Überprüfungsmethoden.

  1. Öffnen Sie die Website dnsleaktest.com oder ipleak.net über Ihre Proxy-Verbindung und führen Sie den erweiterten Test (Extended test) durch.
  2. Vergleichen Sie die Liste der DNS-Server in den Ergebnissen mit dem, was Ihr Internetanbieter tatsächlich ist. Wenn Sie den Anbieter anstelle des Rechenzentrums des Proxys sehen – ist das Leck bestätigt.
  3. Für die Eingabeaufforderung verwenden Sie die Kombination tcpdump oder Wireshark, indem Sie den Verkehr nach Port 53 (DNS) filtern – wenn Pakete direkt zum Server des Anbieters gehen und nicht durch das Proxy-Tunnel, liegt das Problem auf Ihrer Seite.
  4. In Python können Sie die Auflösung schnell manuell über socket.getaddrinfo() vor und nach dem Aktivieren des Proxys überprüfen – wenn die IP mit dem Ergebnis ohne Proxy übereinstimmt, erfolgt die Auflösung lokal.

Behebung in Python (requests, PySocks, urllib3)

Der häufigste Fehler in Python-Skripten ist die Verwendung der Bibliothek requests zusammen mit PySocks ohne explizite Angabe des Schemas socks5h. Der Unterschied liegt in einem Zeichen, aber genau das entscheidet, wer die Domain auflöst.

import requests

# SCHLECHT: DNS wird lokal aufgelöst, um den Proxy herum
proxies_leak = {
    "http": "socks5://user:pass@proxy_host:1080",
    "https": "socks5://user:pass@proxy_host:1080",
}

# GUT: DNS wird auf der Seite des Proxy-Servers aufgelöst
proxies_safe = {
    "http": "socks5h://user:pass@proxy_host:1080",
    "https": "socks5h://user:pass@proxy_host:1080",
}

response = requests.get("https://example.com", proxies=proxies_safe, timeout=10)
print(response.status_code)
print(response.text[:200])

Für die korrekte Funktion des Schemas socks5h über requests müssen Sie die Abhängigkeit installieren:

pip install "requests[socks]" PySocks

Wenn Sie das niedrigstufige urllib3 direkt verwenden, sieht das Beispiel so aus:

from urllib3.contrib.socks import SOCKSProxyManager

proxy = SOCKSProxyManager(
    "socks5h://user:pass@proxy_host:1080",
    num_pools=10
)

response = proxy.request("GET", "https://example.com")
print(response.status)

Für asynchrone Skripte in aiohttp wird die Bibliothek aiohttp-socks verwendet, wobei das Schema genau so angegeben wird:

import aiohttp
from aiohttp_socks import ProxyConnector

connector = ProxyConnector.from_url("socks5h://user:pass@proxy_host:1080")

async def fetch():
    async with aiohttp.ClientSession(connector=connector) as session:
        async with session.get("https://example.com") as resp:
            print(await resp.text())

Behebung in curl

In curl gibt es auch zwei verschiedene Flags für SOCKS5-Proxys, und die Verwirrung zwischen ihnen ist eine klassische Ursache für DNS-Lecks in Bash-Skripten.

# SCHLECHT: Auflösung auf dem lokalen Rechner
curl --socks5 proxy_host:1080 https://example.com

# GUT: Auflösung auf der Seite des Proxy-Servers
curl --socks5-hostname proxy_host:1080 https://example.com

# Mit Authentifizierung
curl --socks5-hostname user:pass@proxy_host:1080 https://example.com

Das Flag --socks5-hostname ist das direkte Analogon zu socks5h in anderen Tools. Es sagt curl: „Berühre DNS nicht, übergebe einfach die Domain an den Proxy-Server, wie sie ist“.

Behebung in Selenium und Playwright

Bei der Browserautomatisierung ist die Situation komplizierter: Chrome oder Firefox kann standardmäßig DNS über die Systemeinstellungen auflösen und dabei den nur auf der Ebene der Netzwerk-Anfrage angegebenen Proxy ignorieren. Für Selenium mit Chrome muss die Auflösung über den Proxy explizit mit einem Start-Flag des Browsers aktiviert werden.

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

options = Options()
options.add_argument("--proxy-server=socks5://proxy_host:1080")
# Kritisches Flag: DNS über den Proxy auflösen
options.add_argument("--host-resolver-rules=MAP * ~NOTFOUND , EXCLUDE proxy_host")

driver = webdriver.Chrome(options=options)
driver.get("https://example.com")

Bei Playwright ist die Situation einfacher: Die Bibliothek löst DNS standardmäßig über den Proxy auf, wenn dieser in der Konfiguration des Browserkontexts angegeben ist.

from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch(
        proxy={"server": "socks5://proxy_host:1080"}
    )
    page = browser.new_page()
    page.goto("https://example.com")
    print(page.title())
    browser.close()

Es wird jedoch empfohlen, das tatsächliche Verhalten nach der Konfiguration immer über dnsleaktest.com zu überprüfen – das Verhalten kann zwischen den Versionen von Chromium variieren.

Konfiguration in Anti-Detect-Browsern

Wenn Sie keinen Code schreiben, sondern über Anti-Detect-Browser wie Dolphin Anty, AdsPower, Multilogin oder GoLogin arbeiten – die gute Nachricht ist, dass die meisten von ihnen DNS automatisch über den Proxy-Server auflösen, wenn das SOCKS5-Protokoll ausgewählt wird, ohne dass es erforderlich ist, „h“ manuell anzugeben. Das ist eines ihrer Hauptvorteile gegenüber selbstgeschriebenen Skripten.

Dennoch sollten Sie dies in der Praxis überprüfen: Öffnen Sie ein Profil im Anti-Detect-Browser, gehen Sie zu dnsleaktest.com und führen Sie den erweiterten Test direkt im Profil durch. Wenn Sie DNS-Server sehen, die der Region Ihres Proxys entsprechen und nicht Ihrem tatsächlichen Anbieter – ist die Konfiguration korrekt. Wenn nicht, wenden Sie sich an den Support des spezifischen Anti-Detect-Browsers oder ändern Sie den Proxy-Typ auf HTTP(S), wo das Problem der DNS-Auflösung nicht so akut auftritt, da HTTP-Proxys immer mit vollständigen URLs arbeiten.

Für das Farming von Konten in Instagram, TikTok und die Verwaltung von Werbekonten in Facebook Ads zeigen sich mobile Proxys gut – aufgrund der dynamischen Rotation von IPs der Mobilfunkanbieter stehen sie seltener im Verdacht von Anti-Betrugs-Systemen, selbst wenn irgendwo in der Kette ein kleines DNS-Leck aufgetreten ist.

Vergleichstabelle der Protokolle für Proxys

Protokoll Wer löst DNS auf Risiko eines Lecks Wo anwenden
SOCKS5 Client (Ihr Computer) Hoch Nur wenn DNS nicht kritisch ist (lokale Tests)
SOCKS5h Proxy-Server Niedrig Parsing, Multi-Accounting, Automatisierung
HTTP/HTTPS-Proxys Proxy-Server (standardmäßig) Niedrig Web-Verkehr, Browser, API-Anfragen

Wenn Ihre Aufgabe darin besteht, Daten schnell zu sammeln, ohne an eine bestimmte Region des Benutzers gebunden zu sein, sollten Sie sich Rechenzentrums-Proxys ansehen – sie sind kostengünstiger im Hinblick auf das Datenvolumen und funktionieren hervorragend in Kombination mit SOCKS5h für das Parsing, wo Geschwindigkeit wichtiger ist als die Maskierung als Wohnbenutzer.

Checkliste vor dem Start des Projekts

  • Verwenden Sie das Schema socks5h://, nicht socks5:// in allen Bibliotheken und Konfigurationen.
  • Für curl verwenden Sie das Flag --socks5-hostname, nicht --socks5.
  • In Selenium wurde das Flag --host-resolver-rules hinzugefügt oder Playwright mit eingebauter Proxy-Auflösung verwendet.
  • Haben Sie das Ergebnis auf dnsleaktest.com oder ipleak.net nach der Konfiguration überprüft und nicht davor.
  • Im Anti-Detect-Browser haben Sie den DNS-Fingerabdruck innerhalb des Profils getestet und nicht nur die externe IP.
  • Für Aufgaben mit hohen Anforderungen an die Anonymität ziehen Sie residential oder mobile Proxys anstelle von Rechenzentrums-Proxys in Betracht.

Fazit

Der Unterschied zwischen SOCKS5 und SOCKS5h ist buchstäblich ein Buchstabe, aber er entscheidet, wer die DNS-Anfrage auflöst: Ihr Computer oder der Proxy-Server. Ein DNS-Leck ist eine der unauffälligsten, aber häufigsten Ursachen für Erkennung beim Parsen, Multi-Accounting und Automatisierung von Werbekonten. Die Überprüfung über dnsleaktest.com und die explizite Angabe des Schemas socks5h im Code, in curl-Befehlen oder in den Einstellungen der Browserautomatisierung schließt dieses Leck in wenigen Minuten.

Wenn Sie gerade die Infrastruktur für Ihre Aufgabe auswählen – für das Parsing und die Arbeit mit APIs eignen sich Rechenzentrums-Proxys besser, für Multi-Accounting und soziale Netzwerke – residential Proxys, und für einen möglichst natürlichen Netzwerk-Fingerabdruck bei der Arbeit mit mobilen Anwendungen – mobile Proxys. In jedem dieser Fälle bleibt die korrekte Konfiguration der DNS-Auflösung über SOCKS5h ein obligatorischer Schritt vor dem Start des Projekts in die Produktion.