Asio zahtijeva SOCKS5 razmjenu nakon povezivanja s proxyjem
Tretirajte SOCKS5 kao stroj stanja protokola nad Asio socketom, s potpunim čitanjima, provjerenim odgovorima i TLS-om prema odredištu samo nakon uspješnog CONNECT-a.
Povezivanje Asio TCP socketa sa SOCKS5 slušaocem dovršava jedan korak: TCP vezu prema tom slušaocu. Ono ne traži od proxyja da se poveže s konačnim serverom. Za dopušteni test javnog odredišta popis SOCKS5 proxyja nudi kandidate za tu prvu TCP točku; konektor ipak mora dovršiti razmjenu ispod.
SOCKS5 konektor zatim mora izvesti razmjenu protokola:
- Pošaljite pozdrav verzije 5 s popisom metoda autentifikacije koje klijent podržava.
- Pročitajte odabranu metodu i izvedite njezinu razmjenu autentifikacije kada je potrebna.
- Pošaljite CONNECT s tipom adrese odredišta, adresom i portom u mrežnom redoslijedu bajtova.
- Pročitajte odgovor, provjerite njegovu verziju i kôd rezultata, pa potrošite cijelu vezanu adresu i port promjenjive duljine.
- Predajte uspostavljeni tok protokolu aplikacije.
Pomoćnik nazvan socks5::async_proxy_connect pripada SOCKS implementaciji koja pruža taj pomoćnik. Navođenje uz boost::asio ne čini ga dijelom Asio sučelja TCP socketa.
TCP čitanja mogu vratiti samo dio odgovora. Sastavite čitanja za potrebne brojeve bajtova, zatim odaberite preostalu duljinu iz polja tipa adrese. Ne pretpostavljajte da svaki odgovor poslužitelja ima fiksni IPv4 raspored.
Za HTTPS izvedite TLS rukovanje s odredištem nakon uspješnog SOCKS CONNECT-a, čuvajući SNI odredišta i provjeru imena hosta. Sam uspješan odgovor proxyja ne autentificira web-mjesto.
Zadržite otkazivanje i rokove kroz cijeli slijed postavljanja. Ako istekne vrijeme uspostave TCP veze, kasnije razmjene pozdrava, autentifikacije i CONNECT-a ostaju bez ograničenja.