Proxy Kontrol

HTTP proxy nasıl test edilir? Düz istek, CONNECT ve 407

Bir HTTP proxy, düz HTTP isteklerini iletmekle HTTPS için tünel açmayı ayrı ayrı yapar; biri çalışırken diğeri reddedilebilir. Bu rehber ikisini ve kimlik doğrulamayı ayrı ayrı sınamayı gösterir.

Kategori
Proxy Kontrol
Okuma süresi
7 dk okuma
Yayın:

HTTP proxy test etmek, tek bir sayfanın açılıp açılmadığına bakmaktan fazlasıdır. Bir HTTP proxy iki farklı yolla çalışır: düz HTTP isteğini kendisi okuyup hedefe iletir, HTTPS için ise CONNECT ile bir bayt tüneli açar. Birini destekleyip ötekini kısıtlayan proxy'ler yaygındır; sonuç olarak "bazı sitelerde çalışıyor, bazılarında çalışmıyor" şikâyeti doğar.

HTTP proxy iki farklı şekilde çalışır

Düz HTTP ile HTTPS isteğinin proxy tarafında farkı
Düz HTTP hedefHTTPS hedef
İstemcinin gönderdiğiGET http://example.com/ HTTP/1.1 (tam adres)CONNECT example.com:443 HTTP/1.1
Proxy ne yapar?İsteği okur, hedefe kendisi iletirBaşarı yanıtından sonra baytları körü körüne aktarır
İçeriği görebilir mi?Evet, trafik okunabilir ve değiştirilebilirHayır, TLS istemci ile hedef arasında kurulur
Başarı işaretiHedefin kendi durum koduProxy'den 2xx yanıtı, ardından hedefin yanıtı
Sık reddedilme nedeniKimlik doğrulama (407)CONNECT yasağı veya yalnızca 443 izni
Konsept · eğitim amaçlı

Hedef düz HTTP: istemci isteği proxy’ye tam URL ile (absolute-form) gönderir, proxy hedefe bağlanıp iletir.

HTTP proxy (düz HTTP hedef) mesaj sırasıHTTP proxy (düz HTTP hedef) için istemci, proxy ve hedef arasındaki 6 adımlı mesaj sırası. Şu an 1. adım: İstek proxy’ye tam URL ile gider. Tüm adımlar aşağıdaki gizli listede yazılıdır.
  1. 1. İstemci → Proxy: İstek proxy’ye tam URL ile gider
  2. 2. Proxy → İstemci: Proxy kimlik doğrulaması isteyebilir (isteğe bağlı)
  3. 3. İstemci → Proxy: İstek kimlik bilgisiyle yinelenir (isteğe bağlı)
  4. 4. Proxy → Hedef: Proxy hedefe bağlanır ve isteği iletir
  5. 5. Hedef → Proxy: Hedef yanıt verir
  6. 6. Proxy → İstemci: Proxy yanıtı istemciye iletir
adım 1/6 · İstemci → Proxy

Düz bağlantı

İstek proxy’ye tam URL ile gider

İstek satırı
GET http://example.com/yol HTTP/1.1
Host
example.com
Biçim
absolute-form (tam URL)

Proxy hedefi bu URL’den okur; istemci hedefe doğrudan bağlanmaz.

Proxy düz HTTP trafiğini okuyabilir ve değiştirebilir.

HTTP proxy el sıkışması: istemci CONNECT satırını gönderir, proxy 200 ile tüneli açar, TLS el sıkışması hedefle uçtan uca yapılır.Konsept animasyonu

1. test: düz HTTP isteği

-x ile proxy'yi, -v ile ayrıntıyı açın. Çıktıda GET http://example.com/ biçiminde tam adresli bir istek satırı görmelisiniz; bu, cURL'ün isteği proxy'ye "şu adrese git" diyerek verdiğini gösterir.

Bash
curl -v -m 20 -x http://proxy.example.com:8080 --proxy-user KULLANICI:PAROLA http://example.com/ -o /dev/null
Düz HTTP üzerinden proxy testi

Başarılıysa hedefin durum kodunu (ör. HTTP/1.1 200 OK) görürsünüz. Proxy araya Via ya da X-Forwarded-For gibi başlıklar ekliyorsa bunlar hedefe giden istekte görünür; anonimlik bu başlıklara bakılarak sınıflandırılır. Ayrıntı için anonimlik seviyeleri sayfasına bakın.

2. test: CONNECT tüneli (HTTPS)

cURL, HTTPS adresi ve HTTP proxy görünce kendiliğinden CONNECT kullanır. Tüneli zorla denemek istediğinizde, örneğin düz HTTP adresinde bile tünel açtırmak için, -p (--proxytunnel) bayrağını ekleyin.

Bash
curl -v -m 20 -x http://proxy.example.com:8080 --proxy-user KULLANICI:PAROLA https://example.com/ -o /dev/null
curl -v -m 20 -p -x http://proxy.example.com:8080 --proxy-user KULLANICI:PAROLA http://example.com/ -o /dev/null
İlk komut HTTPS için CONNECT açar; ikincisi düz HTTP isteğini de tünelden geçirir

Çıktıda şu satırları arayın: > CONNECT example.com:443 HTTP/1.1 istek, < HTTP/1.1 200 Connection established yanıt. 200 gelmişse tünel kurulmuştur; sonrasındaki TLS hatalarının suçlusu proxy değildir.

3. test: 407 ve kimlik doğrulama

Kimlik bilgisi olmadan istek attığınızda doğru çalışan bir kimlik doğrulamalı proxy 407 Proxy Authentication Required ile birlikte Proxy-Authenticate başlığını döner. Bu, proxy'nin çalıştığının kanıtıdır. Sorun, doğru bilgiyle de 407 almanızdır.

Bash
curl -sS -i -m 15 -x http://proxy.example.com:8080 http://example.com/ -o /dev/null -w 'kod=%{http_code}\n'
curl -sS -m 15 -x http://proxy.example.com:8080 --proxy-user KULLANICI:PAROLA http://example.com/ -o /dev/null -w 'kod=%{http_code}\n'
Kimliksiz istek 407 beklenir; kimlikli istek hedefin kodunu döndürmelidir

Temel kimlik doğrulama (Basic) kullanıcı adı ve parolayı kullanici:parola biçiminde Base64'e çevirip Proxy-Authorization: Basic ... başlığıyla gönderir. Base64 şifreleme değildir; proxy'ye düz HTTP ile bağlandığınızda bu başlık yol üzerinde okunabilir. Bu nedenle kimlik bilgisi taşıyan proxy bağlantısını güvenilmeyen ağlarda kullanmaktan kaçının.

Durum koduna göre yorum

KodAnlamıNe yapmalı
200Başarılı (CONNECT için: tünel açıldı)Sorun yok
407Proxy kimlik bilgisi istiyor ya da reddettiKullanıcı adı, parola, IP izin listesi
403Proxy isteği yasakladıHedef port/alan adı kısıtı, hesap kısıtı
502Proxy hedefe ulaşamadı veya geçersiz yanıt aldıBaşka hedefle deneyin
504Proxy hedeften zamanında yanıt alamadıHedefi ve zaman aşımını inceleyin

Python ile tüm testleri tek betikte toplayın

Python
import requests

PROXY = "http://KULLANICI:[email protected]:8080"
proxies = {"http": PROXY, "https": PROXY}

def dene(ad, url):
    try:
        r = requests.get(url, proxies=proxies, timeout=(10, 20))
        print(ad, "->", r.status_code)
    except requests.exceptions.ProxyError as e:
        print(ad, "-> proxy hatasi:", e)
    except requests.exceptions.Timeout:
        print(ad, "-> zaman asimi")
    except requests.exceptions.RequestException as e:
        print(ad, "-> hata:", e)

dene("duz http", "http://example.com/")
dene("https (CONNECT)", "https://example.com/")
Düz HTTP ve HTTPS testi; her biri ayrı raporlanır

Çıktıda iki satırdan yalnızca biri başarısızsa yukarıdaki tabloya göre ayrıştırın: yalnız HTTPS başarısızsa CONNECT kısıtı, yalnız HTTP başarısızsa nadir de olsa düz iletmenin kapalı olması söz konusudur.

Denetleyici ile HTTP proxy sınaması

HTTP proxy denetleyicisi iki yolu ayrı çalıştırır: düz HTTP iletimi ve HTTPS için CONNECT tüneli. Her biri için proxy'ye bağlantı süresini ve sınama adresinden ilk baytın geliş süresini raporlar. Kimlik bilgisi gerekiyorsa girersiniz; yoksa 407 sonucu kendiliğinden görünür.

HTTP proxy'nizi düz istek ve CONNECT için ayrı ayrı sınayın.

Proxy Kontrol Et

Bu yazıda kullanılan araçlar

Sık sorulan sorular

İlgili rehberler