Можно ли получить доступ к деталям TCP-пакета с помощью HTTP-клиента go? - PullRequest
0 голосов
/ 02 апреля 2019

У меня должна быть возможность проверять отметки TOS / DSCP на данных ответа от набора HTTP-серверов. Возможно ли, учитывая список целевых URL-адресов для проверки, если в go есть способ сгенерировать HTTP-запрос, а затем иметь возможность проверить данные TCP-пакета ответа для получения значения TOS?

На данный момент я предполагаю, что для этого может потребоваться создать сокет, а затем динамически сгенерировать пакет TCP, содержащий полезную нагрузку HTTP-запроса. Я искал вокруг, чтобы увидеть, есть ли какие-нибудь библиотеки, которые могли бы помочь в этой задаче, но пока не нашел ничего конкретного.

Примечание: простое TCP-соединение не предоставит достаточно данных - рассматриваемые целевые серверы будут динамически изменять метки TOS / DSCP в зависимости от имени HTTP-сервера (поэтому, по сути, один физический сервер будет отвечать разными метками TOS в зависимости от vHost запрашивается), поэтому важно иметь возможность проверять TOS по фактическим ответным пакетам HTTP, а не по чему-то простому, например, по пингу. Значениям TOS в трехстороннем рукопожатии TCP также нельзя доверять - это должен быть пакет, содержащий данные HTTP.

1 Ответ

0 голосов
/ 07 апреля 2019

Я решил эту проблему, используя gopacket/pcap и net/http.

Короче говоря, я закончил тем, что написал функцию, которая создает канал, а затем вызывает процедуру, которая выполняет фактический захват и анализ пакета. Программа передает захваченное значение TOS обратно в канал, а затем исходная функция выполняет http-запрос, а затем читает канал, чтобы получить результат TOS. Все еще немного в стадии разработки, но пока, похоже, это решение работает довольно хорошо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...