At forbinde en Asio TCP-socket til en SOCKS5-lytter fuldfører ét trin: TCP-forbindelsen til den lytter. Det beder ikke proxyen om at forbinde til den endelige server. Til en tilladt test mod et offentligt mål tilbyder SOCKS5-proxylisten kandidater til det første TCP-endepunkt; connectoren skal stadig gennemføre udvekslingen nedenfor.

En SOCKS5-connector skal derefter køre protokoludvekslingen:

  1. Send en hilsen med version 5, der lister de godkendelsesmetoder, klienten understøtter.
  2. Læs den valgte metode, og udfør dens godkendelsesudveksling, når det kræves.
  3. Send CONNECT med destinationens adressetype, adresse og port i netværksbyteorden.
  4. Læs svaret, kontrollér dets version og resultatkode, og forbrug den fuldstændige variabelt lange bundne adresse og port.
  5. Overdrag den etablerede strøm til applikationens protokol.

En hjælper ved navn socks5::async_proxy_connect hører til den SOCKS-implementering, der leverer den hjælper. At nævne den ved siden af boost::asio gør den ikke til en del af Asios TCP-socketinterface.

TCP-læsninger kan kun returnere en del af et svar. Sammensæt læsninger til de krævede byteantal, og vælg derefter den resterende længde ud fra adressetypefeltet. Antag ikke, at hvert serversvar har det faste IPv4-layout.

For HTTPS skal du udføre destinationens TLS-håndtryk, efter at SOCKS CONNECT er lykkedes, og bevare destinationens SNI og værtsnavnsverifikation. Et vellykket proxysvar alene godkender ikke webstedet.

Behold annullering og deadlines gennem hele opsætningssekvensen. Hvis tidsgrænsen for TCP-forbindelsen udløber, er de senere hilsen-, godkendelses- og CONNECT-udvekslinger ellers ubegrænsede.

Relaterede artikler