Povezivanje Asio TCP socketa s SOCKS5 slušateljem dovršava jedan korak: TCP vezu prema tom slušatelju. Ono ne traži od proxyja da se poveže s konačnim poslužiteljem. 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:

  1. Pošaljite pozdrav verzije 5 s popisom metoda autentikacije koje klijent podržava.
  2. Pročitajte odabranu metodu i izvedite njezinu razmjenu autentikacije kada je potrebna.
  3. Pošaljite CONNECT s tipom adrese odredišta, adresom i portom u mrežnom redoslijedu bajtova.
  4. Pročitajte odgovor, provjerite njegovu verziju i kôd rezultata, pa potrošite cijelu vezanu adresu i port promjenjive duljine.
  5. 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, autentikacije i CONNECT-a ostaju bez ograničenja.

Povezani članci