SOCKS nedir?#
SOCKS, uygulamadan bağımsız çalışan bir aracı protokoldür. HTTP proxy istekleri anlayıp başlıklarını okuyabilirken SOCKS yalnızca bir bağlantıyı iletir: “şu adrese ve şu porta bir bağlantı aç, sonrasında baytları olduğu gibi taşı.” Bu yüzden web tarayıcısı, e-posta istemcisi, mesajlaşma uygulaması veya özel bir TCP servisi aynı SOCKS sunucusunu kullanabilir.
Kısa karşılaştırma#
| Özellik | SOCKS4 | SOCKS5 |
|---|---|---|
| TCP bağlantısı | Evet | Evet |
| UDP desteği | Hayır | Evet (UDP ASSOCIATE) |
| Kimlik doğrulama | Yok (yalnızca isteğe bağlı kullanıcı kimliği alanı) | Kullanıcı adı ve parola dahil birden çok yöntem |
| IPv6 adresleri | Hayır | Evet |
| Alan adı ile bağlanma | Yalnızca SOCKS4a uzantısıyla | Doğrudan destekli |
| Başlangıç el sıkışması | Tek adımlı istek | Yöntem seçimi, kimlik doğrulama, ardından istek |
SOCKS4: sade ve sınırlı#
SOCKS4 yalnızca IPv4 hedeflere TCP bağlantısı açar ve parola tabanlı kimlik doğrulamayı bilmez. Protokol bir tek istek ve yanıttan oluşur. Bu sadelik kolay uygulanmasını sağlar, ancak parolasız yapısı yüzünden yetkisiz kullanımı sınırlayamaz; açık bırakılmış bir SOCKS4 sunucusunu herkes kullanabilir. Alan adı çözümlemesi de istemcide yapıldığı için DNS sorguları proxy’den geçmez; SOCKS4a bu eksiği giderir.
SOCKS5: daha esnek ve daha kapsamlı#
SOCKS5 (RFC 1928) kimlik doğrulama yöntemlerini, UDP aktarımını ve IPv6 adreslerini ekler. Kullanıcı adı ve parola doğrulaması ayrı bir belge olan RFC 1929 ile tanımlanır. Alan adını doğrudan proxy’ye verebilirsiniz; böylece DNS çözümlemesi de uzak tarafta yapılabilir.
- İstemci desteklediği doğrulama yöntemlerini listeler (örneğin “doğrulama yok” ve “kullanıcı adı/parola”).
- Sunucu yöntemlerden birini seçer. Hiçbirini kabul etmezse bağlantı kapanır.
- Kullanıcı adı/parola seçildiyse istemci bilgileri gönderir, sunucu onaylar ya da reddeder.
- İstemci hedefin adresini (IPv4, IPv6 ya da alan adı) ve portunu bildirir.
- Sunucu hedefe bağlanır ve sonucu bildirir; başarılıysa baytlar iki yönde akmaya başlar.
DNS çözümlemesi nerede yapılır?
Bu ayrıntı gizlilik açısından önemlidir. İstemci alan adını kendisi çözerse, DNS sorgusu proxy dışında, yerel ağınızdan gider ve hangi siteye gittiğiniz DNS sunucusunca görülebilir. Alan adını proxy’ye bırakmak için curl’de socks5h:// şemasını kullanırsınız; h harfi “host adını uzakta çöz” anlamına gelir.
SOCKS ile HTTP proxy arasındaki yaklaşım farkı#
HTTP proxy isteği anladığı için başlık ekleyebilir, önbellek tutabilir ve adres bazlı filtreleme yapabilir. SOCKS ise bu katmanın altında çalıştığı için isteğin içeriğiyle ilgilenmez; bağlantıyı kurar ve baytları aktarır. Bunun iki sonucu vardır. Birincisi, aynı SOCKS sunucusu farklı uygulama protokolleriyle sorunsuz çalışır. İkincisi, SOCKS proxy’nin isteğe başlık eklemesi söz konusu olmadığı için başlık temelli anonimlik seviyeleri onun için aynı biçimde geçerli değildir; ayrıntı için proxy anonimlik seviyeleri rehberine bakabilirsiniz.
Pratikte bunun anlamı şudur: bir uygulamanın ayarlarında “SOCKS5” seçeneği varsa, uygulamanın yaptığı bağlantıların hangi protokolle konuştuğuna bakılmaksızın proxy üzerinden geçmesi mümkündür. Ancak her uygulama tüm bağlantılarını proxy’ye yönlendirmez; bazıları DNS sorgularını ya da UDP trafiğini ayrı yollardan gönderir. Bu nedenle hassas bir kullanımda çıkış IP’sini ve DNS davranışını ayrıca sınamak gerekir.
UDP desteğinin pratik değeri#
SOCKS5’in UDP ASSOCIATE komutu, UDP tabanlı trafiğin proxy üzerinden taşınmasına izin verir. Ancak her SOCKS5 sunucusu bu komutu uygulamaz ve birçok ücretsiz sunucu yalnızca TCP aktarır. Bu yüzden bir proxy’nin “SOCKS5” etiketi taşıması UDP’nin çalışacağı anlamına gelmez. Ses veya oyun gibi UDP’ye dayanan bir servis için kullanmadan önce kendi denemenizi yapın.
Kod örnekleri#
# SOCKS5, alan adı çözümlemesi proxy tarafında (socks5h)
curl --proxy socks5h://USERNAME:[email protected]:PORT \
--max-time 15 https://api.ipify.org
# SOCKS5, alan adı yerelde çözülür (socks5)
curl --proxy socks5://USERNAME:[email protected]:PORT \
--max-time 15 https://api.ipify.org
# SOCKS4a (alan adı proxy tarafında çözülür), kimlik doğrulama yoktur
curl --proxy socks4a://proxy.example.com:PORT --max-time 15 https://api.ipify.org# pip install "requests[socks]"
import requests
proxy = "socks5h://USERNAME:[email protected]:PORT"
proxies = {"http": proxy, "https": proxy}
r = requests.get("https://api.ipify.org", proxies=proxies, timeout=15)
print(r.text)Hangisini seçmelisiniz?#
- Yalnızca web trafiği ve basit kullanım: HTTP proxy çoğu zaman yeterlidir. Bkz. HTTP proxy nedir.
- Web dışı uygulamalar, UDP veya IPv6 hedefler: SOCKS5 daha uygundur.
- Parolalı erişim gerekiyorsa: SOCKS5 kullanın; SOCKS4’te kimlik doğrulama yoktur.
- Eski bir yazılım yalnızca SOCKS4 biliyorsa: SOCKS4 ya da SOCKS4a seçeneği kalır.
SOCKS protokolü içeriği şifrelemez. Uçtan uca gizlilik gerekiyorsa TLS kullanan bir uygulama protokolü (örneğin HTTPS) tercih edin. Elinizdeki bir adresin hangi SOCKS sürümünü konuştuğunu SOCKS5 proxy kontrol aracıyla deneyebilir, aday adresler için SOCKS5 proxy listesine ve SOCKS4 proxy listesine bakabilirsiniz. Kalıcı kullanım için ISP proxy ürününde HTTP ve SOCKS5 ödeme sırasında seçilebilir.