Sekiz bayt okuyun, sonra SOCKS4 tünelini devredin
SOCKS4 yanıtının sabit sınırını ayrıştırarak hedefin karşılamasını yutmayın veya var olmayan baytları beklemeyin.
SOCKS4 bağlantı isteği başarılı olur, ancak uygulama sunucunun açılış karşılamasını hiçbir zaman görmez. Bakılacak yerlerden biri bağlayıcının ilk okumasıdır. On altı baytlık bir okuma, sekiz baytlık SOCKS4 yanıtı için çok büyüktür.
| Yanıt alanı | Bayt |
|---|---|
| Yanıt sürüm alanı | 1 |
| Sonuç kodu | 1 |
| Bağlantı noktası alanı | 2 |
| Adres alanı | 4 |
Sonuç kodu 0x5a isteğin kabul edildiğini gösterir. SOCKS4a, isteğin ana bilgisayar adını nasıl taşıdığını değiştirir; yanıtı on altı bayt yapmaz.
Yanıttan sonra aynı TCP akışı hedefin protokolünü taşır. Bir posta sunucusu karşılamasını hemen gönderebilir. Bu nedenle mevcut on altı baytı tüketen bir okuma, proxy yanıtının tamamını ve o karşılamanın ilk sekiz baytını alabilir. Henüz hiçbir şey gelmiyorsa, aşırı büyük engelleyici bir okuma bunun yerine gereksiz bir bekleme ekleyebilir.
Kesin uzunluk ayrıştırıcının sorumluluğudur
Bir kez sekiz bayt istemek, sekiz baytın geldiğine dair yeterli kanıt değildir. Akış okumaları daha az döndürebilir. Yanıtın uzunluğunu bir süre sınırı içinde tam olarak toplayın, kapalı veya başarısız akışta durun, yanıtı inceleyin ve sonraki baytları uygulamaya bırakın.
Bağlayıcı daha büyük tamponlu bir okuma kullanıyorsa sınırdan sonraki her şeyi koruyun ve bir sonraki tüketiciye aktarın. Fazlalığı atmak, farklı okuma boyutuyla aynı veri kaybıdır.
SOCKS5 kendi ayrıştırıcısına ihtiyaç duyar. Yanıt adresinin uzunluğu adres türüne göre farklı olabilir. Her proxy okumasını sabit sekiz baytlık bir okumayla değiştirmek bir protokolü düzeltirken diğerini bozar.