Kailangan ng Asio ang palitan ng SOCKS5 pagkatapos kumonekta sa proxy
Ituring ang SOCKS5 bilang state machine ng protocol sa ibabaw ng Asio socket, na may kumpletong pagbasa, beripikadong tugon at TLS sa destinasyon pagkatapos lamang ng matagumpay na CONNECT.
Ang pagkonekta ng Asio TCP socket sa isang SOCKS5 listener ay nagsasara ng isang hakbang: ang TCP na koneksyon sa listener na iyon. Hindi nito hinihiling sa proxy na kumonekta sa huling server. Para sa pinahihintulutang pagsubok sa pampublikong target, ang listahan ng SOCKS5 proxy ay nag-aalok ng mga kandidato para sa unang TCP endpoint na iyon; kailangan pa ring tapusin ng connector ang palitan sa ibaba.
Pagkatapos, dapat patakbuhin ng SOCKS5 connector ang palitan ng protocol:
- Magpadala ng pagbati ng bersyon 5 na naglilista ng mga paraan ng pagpapatunay na sinusuportahan ng client.
- Basahin ang napiling paraan at isagawa ang palitan ng pagpapatunay nito kapag kailangan.
- Magpadala ng CONNECT kasama ang uri ng address ng destinasyon, address at port sa pagkakasunod-sunod ng byte ng network.
- Basahin ang tugon, suriin ang bersyon at ang result code, at ubusin ang kumpletong nakatali na address at port na may variable na haba.
- Iabot ang naitatag na stream sa protocol ng aplikasyon.
Ang helper na tinatawag na socks5::async_proxy_connect ay kabilang sa implementasyon ng SOCKS na nagbibigay ng helper na iyon. Ang pagbanggit nito sa tabi ng boost::asio ay hindi ito ginagawang bahagi ng interface ng TCP socket ng Asio.
Ang mga pagbasa sa TCP ay maaaring magbalik lamang ng bahagi ng tugon. Pagsamahin ang mga pagbasa para sa mga kinakailangang bilang ng byte, pagkatapos piliin ang natitirang haba mula sa field ng uri ng address. Huwag ipalagay na bawat tugon ng server ay may fixed na layout ng IPv4.
Para sa HTTPS, isagawa ang TLS handshake ng destinasyon pagkatapos ng matagumpay na SOCKS CONNECT, pinapanatili ang SNI at pagpapatunay ng hostname ng destinasyon. Ang matagumpay na tugon ng proxy lamang ay hindi nagpapatunay ng website.
Panatilihin ang pagkansela at mga deadline sa buong pagkakasunod-sunod ng setup. Kung maubos ang oras ng pagtatatag ng TCP connection, ang susunod na palitan ng pagbati, pagpapatunay at CONNECT ay mananatiling walang hangganan.