SOCKS5 proxy kontrol ederken bakılacak şey HTTP durum kodları değil, protokolün kendi aşamalarıdır: yöntem seçimi, kimlik doğrulama ve bağlantı isteği. Her aşamanın kendi hata biçimi vardır; bu yüzden "bağlanamadım" demek yerine hangi aşamada durduğunuzu bulmak çözümü kısaltır.
SOCKS5 el sıkışması üç aşamadır
- 1
Yöntem seçimi
İstemci desteklediği yöntemleri bildirir (
0x00kimlik yok,0x02kullanıcı adı/parola). Sunucu birini seçer; hiçbiri kabul edilemezse0xFFdöner ve bağlantı kesilir. - 2
Kullanıcı adı ve parola (RFC 1929)
0x02seçildiyse istemci kullanıcı adı ve parolayı yollar. Yanıttaki durum baytı0ise başarılıdır; başka bir değer reddedilmedir. - 3
Bağlantı isteği
İstemci hedef adresi ve portu iletir (IPv4, alan adı ya da IPv6 olarak). Sunucu bir yanıt kodu döner;
0başarıdır, diğerleri bir hata nedenini bildirir.
SOCKS5 (RFC 1928): yöntem pazarlığı, isteğe bağlı kullanıcı adı/parola (RFC 1929), bağlantı isteği ve yanıt.
- 1. İstemci → Proxy: İstemci desteklediği yöntemleri sunar
- 2. Proxy → İstemci: Proxy bir yöntem seçer
- 3. İstemci → Proxy: Kullanıcı adı ve parola gönderilir (isteğe bağlı)
- 4. Proxy → İstemci: Proxy kimlik bilgisini onaylar (isteğe bağlı)
- 5. İstemci → Proxy: İstemci bağlantı ister
- 6. Proxy → Hedef: Proxy hedefe TCP bağlantısı açar
- 7. Proxy → İstemci: Proxy sonucu bildirir
- 8. İstemci → Hedef: Veri proxy üzerinden aktarılır
Düz bağlantı
İstemci desteklediği yöntemleri sunar
- VER
- 0x05
- NMETHODS
- sunulan yöntem sayısı
- METHODS
- 0x00 kimlik yok · 0x02 kullanıcı/parola
SOCKS5 kendi başına şifrelemez. socks5:// ile ad istemcide, socks5h:// ile proxy’de çözülür. Kontrol aracımız yalnızca TCP CONNECT sınar.
Yanıt kodları
| Kod | Anlamı | Pratikte genellikle |
|---|---|---|
| 0 | Başarılı | Tünel hazır |
| 1 | Genel SOCKS sunucu hatası | Proxy'nin iç sorunu, sağlayıcıya bildirin |
| 2 | Kural kümesi izin vermiyor | Hedef veya port hesabınızda yasak |
| 3 | Ağ erişilemez | Proxy'nin hedef ağa yolu yok |
| 4 | Sunucu erişilemez | Hedef adres kapalı ya da çözülemedi |
| 5 | Bağlantı reddedildi | Hedef portta dinleyen yok |
| 6 | TTL doldu | Yönlendirme sorunu veya çok uzun yol |
| 7 | Komut desteklenmiyor | CONNECT dışında bir komut istendi (ör. UDP) |
| 8 | Adres türü desteklenmiyor | Örneğin proxy IPv6 hedefi ya da alan adını kabul etmiyor |
cURL ile SOCKS5 testi: socks5 ile socks5h farkı
cURL'de SOCKS5 için iki biçim vardır. socks5:// alan adının istemci tarafında çözülmesini, socks5h:// ise çözümlemeyi proxy'ye bırakmayı ifade eder. Yerel DNS sorgularının dışarı sızmasını istemiyorsanız h ekli biçimi seçin; bu aynı zamanda yalnızca proxy tarafından çözülebilen adreslere ulaşmanın tek yoludur.
curl -sS -m 20 --socks5-hostname proxy.example.com:1080 --proxy-user KULLANICI:PAROLA -w 'kod=%{http_code} baglanti=%{time_connect} toplam=%{time_total}\n' -o /dev/null https://example.com/
curl -sS -m 20 -x socks5h://KULLANICI:[email protected]:1080 -o /dev/null -w 'kod=%{http_code}\n' https://example.com/
curl -sS -m 20 --socks5 proxy.example.com:1080 --proxy-user KULLANICI:PAROLA -o /dev/null -w 'kod=%{http_code}\n' https://example.com/Hata çıktısını okumak
curl: (7) Failed to connect to proxy: port kapalı veya IP yanlış; henüz SOCKS aşamasına bile gelinmedi.curl: (97) ...benzeri SOCKS el sıkışma hataları: yöntem ya da kimlik doğrulama reddi, proxy ise HTTP proxy olabilir (protokol uyuşmazlığı).curl: (28)zaman aşımı: proxy yanıt vermiyor ya da hedef yolu düşüyor. Bkz. proxy timeout.- Sonuç boş ya da bağlantı kopması: proxy SOCKS5 değil, HTTP proxy olabilir. Aynı
IP:port'u-x http://ile deneyin.
Python ile SOCKS5 testi
requests kütüphanesi SOCKS desteğini ek pakette sunar: pip install "requests[socks]". Şemada socks5h yazarsanız ad çözümlemesi proxy'de yapılır.
import time
import requests
PROXY = "socks5h://KULLANICI:[email protected]:1080"
proxies = {"http": PROXY, "https": PROXY}
t0 = time.perf_counter()
try:
r = requests.get("https://example.com/", proxies=proxies, timeout=(10, 20))
print("durum:", r.status_code, "sure: %.2f sn" % (time.perf_counter() - t0))
except requests.exceptions.ConnectTimeout:
print("proxy'ye baglanti zaman asimi")
except requests.exceptions.ProxyError as e:
print("SOCKS hatasi (kimlik, kural veya hedef):", e)
except requests.exceptions.RequestException as e:
print("hata:", e)SOCKS5 ile ilgili sık yanılgılar
- SOCKS5 trafiği şifrelemez. Proxy'ye giden yol, HTTPS gibi uygulama katmanı şifrelemesi kullanmadığı sürece okunabilir kalır.
- Parola düz metin gider. RFC 1929 kimlik doğrulaması şifresizdir; güvenilmeyen ağlarda dikkatli olun.
- Her SOCKS5 proxy UDP taşımaz. UDP ASSOCIATE komutu protokolde tanımlıdır ama her proxy bunu desteklemez; UDP gerekiyorsa sağlayıcıya sorun. Denetleyicimiz yalnızca TCP CONNECT'i sınar.
- SOCKS4 farklı bir protokoldür. Kimlik doğrulama (kullanıcı adı/parola) ve IPv6 yoktur; ayrıntı için SOCKS4 sayfasına bakın.
Denetleyici ile SOCKS5 sınaması
SOCKS5 denetleyicisi üç aşamayı ayrı ayrı gösterir: proxy'ye bağlantı süresi, el sıkışma ve kimlik doğrulama sonucu, hedefe CONNECT yanıtı. Hata yanıt kodlarıyla birlikte anlatıldığı için yukarıdaki tabloyla doğrudan eşleştirebilirsiniz. Sınama adresinden ilk baytın geliş süresi de ayrıca kaydedilir.
SOCKS5 proxy'nizin hangi aşamada durduğunu görün.
Proxy Kontrol Et