Bir C yapısı neden hatalı bir SOCKS isteği üretebilir
Derleyici düzenini tel biçimi olarak görmek yerine açık alan genişliklerini, bayt sırasını ve akış G/Ç'sini inceleyin.
Geçerli bir proxy adresi, elle yazılmış bir SOCKS iletisini geçerli kılmaz. Bir C veya C++ yapısı göndermek, protokolün hiç istemediği dolguyu veya ana makine sırasındaki tam sayıları gönderebilir.
Alan adı içeren bir SOCKS5 CONNECT isteği için, yöntem görüşmesinden ve seçilen herhangi bir kimlik doğrulamadan sonra bu diziyi açıkça serileştirin:
- Sürüm, komut, ayrılmış bayt ve adres türü
- Alan adı uzunluğu ve alan adı baytları
- Ağ baytı sırasında iki baytlık hedef bağlantı noktası
Adres uzunlukları SOCKS sürümüne ve adres türüne bağlıdır. Sabit genişlikli sayısal alanlar belirtilen gösterimlerine ihtiyaç duyar; alan adı dizelerinin kendi uzunluk kodlaması vardır. C dize sonlandırıcısı, tel iletisine sıfır eklemek için genel bir talimat değildir.
| Uygulamada kısa yol | Denetlenecek sorun |
|---|---|
| 8 bitlik bir işaretçi üzerinden 32 bitlik değer atamak | Dört baytın tümünü yaymaz |
| Bir tamponu daha büyük tamsayı işaretçisine dönüştürmek | Hizalama ve bayt sırası hâlâ ele alınmalıdır |
| Bir okuma veya yazmanın tek ileti olduğunu varsaymak | TCP protokol dizisinin yalnızca bir kısmını aktarabilir |
Her alanı amaçlanan hedefle karşılaştırın ve kısmi G/Ç'yi ele alın. İki bayt almak, yanıtın tamamının geldiğini kanıtlamaz. Bu sınırları incelemek, bozuk bir isteği doğru tanımlanmış bir bağlantıyı reddeden sunucudan ayırabilir.