SOCKS5 proxy'nizi ayarladınız, trafik gibi görünüyor ki onun üzerinden geçiyor, tarayıcıda doğru IP görünüyor — ama siteler yine de gerçek bölgenizi görüyor veya sağlayıcınız bir şeylerden şüphelenmeye başlıyor. Neden genellikle aynıdır: DNS sorguları doğrudan bilgisayarınızdan, proxy'yi atlayarak gidiyor. Bu yazıda, bunun neden böyle olduğunu, SOCKS5'in SOCKS5h'den ne farkı olduğunu ve bu sızıntıyı kodda ve hazır araçlarda nasıl kapatacağımızı inceleyeceğiz.
SOCKS5 nedir ve SOCKS5h'den ne farkı var
SOCKS5, TCP/UDP bağlantıları düzeyinde çalışan bir proxy protokolüdür ve HTTP(S) proxy'lerin aksine paketlerin içeriğini analiz etmez. Bu, onu evrensel hale getirir: SOCKS5 üzerinden neredeyse her türlü trafiği proxy'leyebilirsiniz — tarayıcı, Telegram, torrent istemcisi, Python'da bir script. Ancak klasik SOCKS5 uygulamasının önemli bir özelliği vardır: varsayılan olarak alan adı çözümü (DNS) istemci tarafında, yani bilgisayarınızda gerçekleştirilir, proxy sunucusunda değil.
SOCKS5h, aynı protokoldür, ancak istemci uygulamasına alan adını kendisi çözmemesi ve olduğu gibi proxy sunucusuna göndermesi için "h" (hostname) modifikatörü eklenmiştir; ve proxy, kendi adına DNS sorgusunu gerçekleştirir. Bir harf farkı var, ama anonimlik ve çalışma istikrarı açısından sonuçlar temeldir.
Önemli olan: SOCKS5h, ayrı bir protokol değil, belirli bir kütüphane veya uygulama düzeyinde proxy'ye nasıl istek gönderileceği konusunda bir anlaşmadır. Proxy sunucusu her iki durumda da aynı şekilde çalışır, tek fark, DNS çözümlemesini kimin başlattığıdır — istemci mi yoksa sunucu mu.
Neden DNS sorguları proxy'yi atlar
https://example.com gibi bir adrese eriştiğinizde, bağlantıyı kurmadan önce uygulama bu alan adının IP adresini öğrenmelidir. Bu işleme DNS çözümleme denir. Normal bir SOCKS5 üzerinden çalışırken, birçok kütüphane ve sistem ayarı çözümlemeyi sistemin DNS sunucusu üzerinden gerçekleştirir — bu, sağlayıcınızın veya yönlendiricinizin ağ ayarlarında belirtilen DNS sunucusudur.
Sonuç olarak, paradoksal bir durum ortaya çıkar: HTTP/TCP trafiği proxy üzerinden gider ve istek proxy sunucusunun IP'sinden geliyormuş gibi görünürken, DNS sorgusu "example.com'un IP'si nedir?" doğrudan gerçek IP'nizden sağlayıcının DNS sunucusuna gider. Bu, DNS sızıntısıdır (DNS leak). Daha derin bir düzeyde ağ etkinliğini analiz eden bir site veya servis (bu tür tespit yöntemlerini aktif olarak kullanan anti-fraud sistemleri Facebook, Google, TikTok), bağlantının IP'si ile DNS sorgusunun kaynağı arasında bir tutarsızlık görebilir.
Bunun nedeni, SOCKS5 protokolünün başlangıçta zaten var olan IP bağlantıları için bir taşıma düzeyi olarak geliştirilmesidir, isimlerin çözümlemesi için değil. Kütüphane ve araç geliştiricileri, DNS sorgusunu tünel üzerinden iletme işlevini ayrı olarak uygulamak zorunda kaldılar — buradan SOCKS5h, "alan adını kendin çöz, ben değil" şeklinde açık bir talimat olarak ortaya çıktı.
DNS sızıntısının pratikteki tehlikeleri
Bir parser veya otomasyon scripti geliştiricisi için DNS sızıntısı, soyut bir teori değil, hesapların engellenmesi ve yasaklanması için somut bir nedendir. Birkaç senaryoyu inceleyelim.
Pazar yerleri ve sitelerin taranması. Eğer Wildberries, Ozon veya başka bir kaynağı proxy üzerinden doğru bölgeden tarıyorsanız, ancak DNS sorguları sağlayıcı üzerinden gidiyorsa, anti-bot sistemi coğrafi konumda bir tutarsızlık tespit edebilir ve oturumun şüphe seviyesini artırabilir — CAPTCHA veya proxy IP'sinin geçici olarak engellenmesine kadar.
Çoklu hesap kullanımı ve trafik arbitrajı. Facebook Ads, TikTok Ads veya Google Ads ile birden fazla hesapla çalışırken, anti-fraud sistemleri DNS parmak izi de dahil olmak üzere onlarca parametreyi analiz eder. Eğer birkaç "farklı" hesabın DNS sorguları aniden aynı sağlayıcının DNS sunucusu üzerinden gidiyorsa, bu, hesapların bir küme haline getirilmesi için bir sinyal olur — ve bunun sonucunda bir yasak zinciri (chain-ban) oluşur.
Selenium/Playwright'ta otomasyon. Tarayıcıda kullanıcı eylemlerini taklit eden scriptler özellikle savunmasızdır: tarayıcı, yalnızca HTTP trafiği için belirtilen proxy'yi göz ardı ederek, sistem ayarları üzerinden DNS çözümleyebilir. Sonuç olarak, diğer tüm ağ parmak izi gerçek konumu ortaya çıkarır.
Bu görevlerin çoğu için rezidans proxy'leri kullanmak kritik öneme sahiptir; bu, ağ işaretleri açısından tespit riskini önemli ölçüde azaltır.
DNS sızıntısı olup olmadığını nasıl kontrol edebilirim
Problemi düzeltmeden önce, gerçekten var olup olmadığını kontrol etmek önemlidir. İşte birkaç hızlı kontrol yöntemi.
dnsleaktest.comveyaipleak.netsitesini proxy bağlantınız üzerinden açın ve genişletilmiş testi (Extended test) başlatın.- Sonuçlardaki DNS sunucuları listesini, internet sağlayıcınızın gerçekte kim olduğunu kontrol edin. Eğer sağlayıcıyı proxy veri merkezi yerine görüyorsanız — sızıntı onaylanmıştır.
- Komut satırı için
tcpdumpveyaWiresharkkombinasyonunu kullanarak trafiği 53 numaralı port (DNS) üzerinden filtreleyin — eğer paketler doğrudan sağlayıcının sunucusuna gidiyorsa ve proxy tüneli üzerinden gitmiyorsa, sorun sizin tarafınızdadır. - Python'da, proxy'yi açmadan önce ve sonra
socket.getaddrinfo()ile çözümlemeyi hızlıca kontrol edebilirsiniz — eğer IP, proxy olmadan elde edilen sonuçla eşleşiyorsa, çözümleme yerel olarak gerçekleşiyor demektir.
Python'da düzeltme (requests, PySocks, urllib3)
Python scriptlerinde en yaygın hata, requests kütüphanesinin PySocks ile birlikte açık bir şekilde socks5h şemasını belirtmemektir. Bir karakter farkı var, ama bu, alan adını kimin çözdüğünü belirler.
import requests
# KÖTÜ: DNS yerel olarak çözülüyor, proxy'yi atlayarak
proxies_leak = {
"http": "socks5://user:pass@proxy_host:1080",
"https": "socks5://user:pass@proxy_host:1080",
}
# İYİ: DNS proxy sunucusunda çözülüyor
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])
socks5h şemasının requests ile düzgün çalışması için bir bağımlılık yüklemeniz gerekecek:
pip install "requests[socks]" PySocks
Eğer doğrudan düşük seviyeli urllib3 kullanıyorsanız, örnek şöyle görünecektir:
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)
aiohttp üzerinde asenkron scriptler için aiohttp-socks kütüphanesi kullanılır, burada şema tam olarak aynı şekilde belirtilir:
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())
curl'da düzeltme
curl'da da SOCKS5 proxy için iki farklı bayrak vardır ve bunlar arasındaki karışıklık, bash scriptlerinde DNS sızıntısının klasik nedenidir.
# KÖTÜ: yerel makinede çözümleme
curl --socks5 proxy_host:1080 https://example.com
# İYİ: proxy sunucusunda çözümleme
curl --socks5-hostname proxy_host:1080 https://example.com
# Yetkilendirme ile
curl --socks5-hostname user:pass@proxy_host:1080 https://example.com
--socks5-hostname bayrağı, diğer araçlardaki socks5h ile doğrudan bir eşdeğerdir. Bu, curl'a "DNS'i değiştirme, sadece alan adını olduğu gibi proxy sunucusuna ilet" demektir.
Selenium ve Playwright'ta düzeltme
Tarayıcı otomasyonu ile durum daha karmaşık: Chrome veya Firefox varsayılan olarak DNS'i sistem ayarları üzerinden çözebilir, yalnızca ağ isteği düzeyinde belirtilen proxy'yi göz ardı ederek. Selenium ile Chrome kullanırken, tarayıcıyı başlatma bayrağı ile proxy üzerinden çözümlemeyi açıkça etkinleştirmek gerekir.
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = Options()
options.add_argument("--proxy-server=socks5://proxy_host:1080")
# Kritik öneme sahip bayrak: DNS'i proxy üzerinden çöz
options.add_argument("--host-resolver-rules=MAP * ~NOTFOUND , EXCLUDE proxy_host")
driver = webdriver.Chrome(options=options)
driver.get("https://example.com")
Playwright'ta durum daha basittir: kütüphane varsayılan olarak proxy üzerinden DNS'i çözer, eğer tarayıcı bağlamı yapılandırmasında belirtilmişse.
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()
Yine de, ayarlamadan sonra her zaman gerçek davranışı dnsleaktest.com üzerinden kontrol etmek önerilir — davranış, Chromium sürümleri arasında farklılık gösterebilir.
Anti-detect tarayıcılarda ayarlama
Eğer kod yazmıyorsanız ve Dolphin Anty, AdsPower, Multilogin veya GoLogin gibi anti-detect tarayıcılar üzerinden çalışıyorsanız — iyi haber, çoğu zaten SOCKS5 protokolünü seçtiğinizde DNS'i proxy sunucusu üzerinden otomatik olarak çözmektedir, "h" eklemeye gerek kalmadan. Bu, kendi yazdığınız scriptlere karşı önemli bir avantajdır.
Yine de bunu pratikte kontrol etmek önemlidir: anti-detect tarayıcısında bir profil açın, dnsleaktest.com'a gidin ve profil içinde genişletilmiş testi başlatın. Eğer proxy'nizin bölgesiyle uyumlu DNS sunucularını görüyorsanız ve gerçek sağlayıcınızla değilse — ayarlama doğrudur. Eğer değilse, belirli bir anti-detect tarayıcısının desteğine başvurun veya proxy türünü HTTP(S) olarak değiştirin; burada DNS çözümleme sorunu genellikle bu kadar keskin bir şekilde ortaya çıkmaz, çünkü HTTP proxy her zaman tam URL'lerle çalışır.
Instagram, TikTok hesapları oluşturma ve Facebook Ads reklam yönetimi için mobil proxy'ler iyi performans gösterir — mobil operatörlerin dinamik IP rotasyonu sayesinde, anti-fraud sistemleri tarafından daha az şüpheyle karşılaşırlar, hatta zincir içinde küçük bir DNS sızıntısı olsa bile.
Proxy protokollerinin karşılaştırma tablosu
| Protokol | DNS'i kim çözüyor | Sızıntı riski | Nerede kullanılır |
|---|---|---|---|
| SOCKS5 | İstemci (bilgisayarınız) | Yüksek | DNS kritik değilse (yerel testler) |
| SOCKS5h | Proxy sunucusu | Düşük | Tarama, çoklu hesap kullanımı, otomasyon |
| HTTP/HTTPS proxy | Proxy sunucusu (varsayılan) | Düşük | Web trafiği, tarayıcılar, API istekleri |
Eğer amacınız belirli bir kullanıcı bölgesine bağlı olmadan yüksek hızlı veri toplamaksa, veri merkezi proxy'lerine göz atın — bunlar trafik hacmine göre daha ucuzdur ve hızın önemli olduğu, kullanıcı gibi gizlenmenin gerekmediği tarama işlemleri için SOCKS5h ile mükemmel çalışır.
Proje başlatmadan önce kontrol listesi
socks5h://şemasını, tüm kütüphanelerde ve yapılandırmalardasocks5://yerine kullanın.- curl için
--socks5-hostnamebayrağını,--socks5yerine kullanın. - Selenium'da
--host-resolver-rulesbayrağını ekleyin veya Playwright kullanarak yerleşik proxy çözümlemesi ile çalışın. - Ayarlamadan sonra dnsleaktest.com veya ipleak.net üzerinde sonucu kontrol ettiniz, öncesinde değil.
- Anti-detect tarayıcısında DNS parmak izini profil içinde test ettiniz, sadece dış IP değil.
- Yüksek anonimlik gerektiren görevler için veri merkezi yerine rezidans veya mobil proxy'leri değerlendirin.
Sonuç
SOCKS5 ile SOCKS5h arasındaki fark, kelimenin tam anlamıyla bir harfdir, ancak bu, DNS sorgusunu kimin çözdüğünü belirler: bilgisayarınız mı yoksa proxy sunucusu mu. DNS sızıntısı, tarama, çoklu hesap kullanımı ve reklam yönetimi sırasında tespit için en sık görülen, ancak en az fark edilen nedenlerden biridir. dnsleaktest.com üzerinden kontrol yapmak ve kodda, curl komutlarında veya tarayıcı otomasyonu ayarlarında socks5h şemasını açıkça belirtmek, bu açığı birkaç dakika içinde kapatır.
Eğer göreviniz için bir altyapı seçiyorsanız — tarama ve API ile çalışma için veri merkezi proxy'leri daha uygundur, çoklu hesap kullanımı ve sosyal medya için — rezidans proxy'leri, mobil uygulamalarla çalışırken en doğal ağ parmak izi için — mobil proxy'ler. Bu durumların her birinde, SOCKS5h üzerinden DNS çözümlemesinin doğru ayarlanması, projeyi üretime almadan önce zorunlu bir adımdır.