Połączenie gniazda TCP Asio z nasłuchiwaczem SOCKS5 kończy tylko jeden krok: połączenie TCP z tym nasłuchiwaczem. Nie prosi proxy o połączenie z serwerem końcowym. Do dozwolonego testu publicznego celu lista proxy SOCKS5 oferuje kandydatów dla tego pierwszego punktu końcowego TCP; łącznik nadal musi wykonać poniższą wymianę.

Łącznik SOCKS5 musi następnie przeprowadzić wymianę protokołu:

  1. Wyślij powitanie w wersji 5 z listą metod uwierzytelniania obsługiwanych przez klienta.
  2. Odczytaj wybraną metodę i w razie potrzeby wykonaj jej wymianę uwierzytelniania.
  3. Wyślij CONNECT z typem adresu celu, adresem i portem w kolejności bajtów sieciowych.
  4. Odczytaj odpowiedź, sprawdź jej wersję i kod wyniku, a następnie zużyj pełny powiązany adres i port o zmiennej długości.
  5. Przekaż ustanowiony strumień protokołowi aplikacji.

Pomocnik o nazwie socks5::async_proxy_connect należy do implementacji SOCKS, która go dostarcza. Wymienienie go obok boost::asio nie czyni go częścią interfejsu gniazda TCP Asio.

Odczyty TCP mogą zwrócić tylko część odpowiedzi. Złóż odczyty dla wymaganych liczby bajtów, a następnie wybierz pozostałą długość z pola typu adresu. Nie zakładaj, że każda odpowiedź serwera ma stały układ IPv4.

Dla HTTPS wykonaj uścisk dłoni TLS z celem po udanym SOCKS CONNECT, zachowując SNI i weryfikację nazwy hosta celu. Sama udana odpowiedź proxy nie uwierzytelnia witryny.

Utrzymuj anulowanie i terminy przez całą sekwencję konfiguracji. Jeśli upłynie czas nawiązania połączenia TCP, późniejsze wymiany powitania, uwierzytelniania i CONNECT pozostaną bez ograniczeń.

Powiązane artykuły