Asio бара SOCKS5 размена по поврзувањето со прокси
Третирајте го SOCKS5 како машина на состојби на протокол над Asio сокетот, со целосни читања, проверени одговори и TLS кон дестинацијата само по успешен CONNECT.
Поврзувањето на Asio TCP сокет со SOCKS5 слушател завршува еден чекор: TCP врската со тој слушател. Тоа не бара од проксито да се поврзе со крајниот сервер. За дозволен тест на јавна цел списокот на SOCKS5 проксија нуди кандидати за таа прва TCP крајна точка; поврзувачот сепак мора да ја заврши размената подолу.
Потоа SOCKS5 поврзувачот мора да ја изврши размената на протоколот:
- Испратете поздрав од верзија 5 со список на методите за автентикација што ги поддржува клиентот.
- Прочитајте го избраниот метод и изведете ја неговата размена за автентикација кога е потребно.
- Испратете CONNECT со типот на адреса на дестинацијата, адресата и портата во мрежен бајтен редослед.
- Прочитајте го одговорот, проверете ја неговата верзија и кодот на резултатот, и потрошете ја целата врзана адреса и порта со променлива должина.
- Предајте го воспоставениот тек на протоколот на апликацијата.
Помошникот наречен socks5::async_proxy_connect припаѓа на SOCKS имплементацијата што го обезбедува тој помошник. Неговото именување покрај boost::asio не го прави дел од интерфејсот на TCP сокетот на Asio.
TCP читањата можат да вратат само дел од одговорот. Составете читања за потребните броеви на бајти, потоа изберете ја преостанатата должина од полето за тип на адреса. Не претпоставувајте дека секој одговор на серверот го има фиксниот IPv4 распоред.
За HTTPS изведете го TLS ракувањето со дестинацијата по успешниот SOCKS CONNECT, зачувувајќи го SNI на дестинацијата и проверката на името на домаќинот. Само успешен одговор од проксито не ја автентицира веб-страницата.
Задржете го откажувањето и роковите низ целата низа за поставување. Ако времето за воспоставување на TCP врската истече, подоцнежните размени на поздрав, автентикација и CONNECT остануваат без ограничување.