Å koble en Asio TCP-socket til en SOCKS5-lytter fullfører ett trinn: TCP-forbindelsen til den lytteren. Det ber ikke proxyen om å koble til den endelige serveren. For en tillatt test mot et offentlig mål tilbyr SOCKS5-proxylisten kandidater for det første TCP-endepunktet; connectoren må likevel gjennomføre utvekslingen nedenfor.

En SOCKS5-connector må deretter kjøre protokollutvekslingen:

  1. Send en hilsen med versjon 5 som lister opp godkjenningsmetodene klienten støtter.
  2. Les den valgte metoden og utfør godkjenningsutvekslingen når det kreves.
  3. Send CONNECT med destinasjonens adressetype, adresse og port i nettverksbyte-rekkefølge.
  4. Les svaret, kontroller versjonen og resultatkoden, og bruk opp den fullstendige variabelt lange bundne adressen og porten.
  5. Overlever den etablerte strømmen til applikasjonens protokoll.

En hjelper som heter socks5::async_proxy_connect tilhører SOCKS-implementasjonen som leverer den hjelperen. Å nevne den ved siden av boost::asio gjør den ikke til en del av Asios TCP-socketgrensesnitt.

TCP-lesinger kan bare returnere en del av et svar. Sett sammen lesinger for de nødvendige byteantalene, og velg deretter den gjenværende lengden fra adressetypefeltet. Ikke anta at hvert serversvar har det faste IPv4-oppsettet.

For HTTPS, utfør destinasjonens TLS-håndtrykk etter at SOCKS CONNECT lykkes, og bevar destinasjonens SNI og vertsnavnverifisering. Et vellykket proxysvar alene godkjenner ikke nettstedet.

Behold avbrudd og frister gjennom hele oppsettsekvensen. Hvis tidsgrensen for TCP-forbindelsen utløper, blir de senere hilsen-, godkjennings- og CONNECT-utvekslingene ellers ubegrensede.

Relaterte artikler