Asio, proxy'ye bağlandıktan sonra SOCKS5 alışverişi gerektirir
SOCKS5'i Asio soketi üzerinde bir protokol durum makinesi olarak ele alın: tam okumalar, doğrulanmış yanıtlar ve hedefe TLS yalnızca CONNECT başarılı olduktan sonra.
Bir Asio TCP soketini SOCKS5 dinleyicisine bağlamak tek bir adımı tamamlar: o dinleyiciye TCP bağlantısı. Proxy'den son sunucuya bağlanmasını istemez. İzin verilen bir genel hedef testi için SOCKS5 proxy listesi o ilk TCP uç noktası için adaylar sunar; bağlayıcı yine de aşağıdaki alışverişi tamamlamalıdır.
Ardından SOCKS5 bağlayıcısı protokol alışverişini yürütmelidir:
- İstemcinin desteklediği kimlik doğrulama yöntemlerini listeleyen 5. sürüm karşılamasını gönderin.
- Seçilen yöntemi okuyun ve gerektiğinde kimlik doğrulama alışverişini yapın.
- CONNECT'i hedefin adres türü, adresi ve ağ baytı sırasındaki bağlantı noktasıyla gönderin.
- Yanıtı okuyun, sürümünü ve sonuç kodunu denetleyin, ardından değişken uzunluktaki bağlı adres ve bağlantı noktasının tamamını tüketin.
- Kurulan akışı uygulamanın protokolüne teslim edin.
socks5::async_proxy_connect adlı yardımcı, bu yardımcıyı sağlayan SOCKS uygulamasına aittir. Onu boost::asio yanında anmak, Asio'nun TCP soket arayüzünün parçası yapmaz.
TCP okumaları yanıtın yalnızca bir bölümünü döndürebilir. Gerekli bayt sayıları için okumaları birleştirin, ardından kalan uzunluğu adres türü alanından seçin. Her sunucu yanıtının sabit IPv4 düzenine sahip olduğunu varsaymayın.
HTTPS için SOCKS CONNECT başarılı olduktan sonra hedefin TLS el sıkışmasını yapın; hedefin SNI'sını ve ana bilgisayar adı doğrulamasını koruyun. Tek başına başarılı bir proxy yanıtı web sitesini doğrulamaz.
Kurulum dizisi boyunca iptal ve son tarihleri koruyun. TCP bağlantısının kurulma süresi dolarsa sonraki karşılama, kimlik doğrulama ve CONNECT alışverişleri sınırsız kalır.