Повезивање Asio TCP сокета са SOCKS5 слушаоцем завршава један корак: TCP везу ка том слушаоцу. Оно не тражи од проксија да се повеже са коначним сервером. За дозвољени тест јавног одредишта списак SOCKS5 проксија нуди кандидате за ту прву TCP тачку; конектор ипак мора да заврши размену испод.

SOCKS5 конектор затим мора да изведе размену протокола:

  1. Пошаљите поздрав верзије 5 са списком метода аутентификације које клијент подржава.
  2. Прочитајте изабрани метод и изведите његову размену аутентификације када је потребно.
  3. Пошаљите CONNECT са типом адресе одредишта, адресом и портом у мрежном редоследу бајтова.
  4. Прочитајте одговор, проверите његову верзију и кôд резултата, па потрошите целу везану адресу и порт променљиве дужине.
  5. Предајте успостављени ток протоколу апликације.

Помоћник назван socks5::async_proxy_connect припада SOCKS имплементацији која пружа тог помоћника. Навођење поред boost::asio не чини га делом интерфејса TCP сокета у Asio.

TCP читања могу вратити само део одговора. Саставите читања за потребне бројеве бајтова, затим изаберите преосталу дужину из поља типа адресе. Не претпостављајте да сваки одговор сервера има фиксни IPv4 распоред.

За HTTPS изведите TLS руковање са одредиштем након успешног SOCKS CONNECT-а, чувајући SNI одредишта и проверу имена хоста. Сам успешан одговор проксија не аутентификује веб-сајт.

Задржите отказивање и рокове кроз цео след подешавања. Ако истекне време успостављања TCP везе, касније размене поздрава, аутентификације и CONNECT-а остају без ограничења.

Повезани чланци