Предполагая, что у меня есть сервер приложений (Linux), работающий на порте 80, как я могу убедиться (с помощью tcpdump, я полагаю), что все входящие запросы разархивированы, а также все ответы разархивированы? Кроме того, поскольку сам сервер выполняет звонки на другой сервер (Windows), как я могу проверить исходящие и входящие пакеты (если они имеют в виду, я имею в виду) на и с этого другого сервера? Спасибо
3 ответа
Один только tcpdump
не является отличным способом сделать это, технически вы можете определить ответ, проверив пакеты, но это не лучший сетевой уровень для просмотра. Первая проблема заключается в том, что вам нужно будет работать с переменными заголовками HTTP, вторая проблема заключается в том, что с HTTP/1.1 и постоянными соединениями вы должны проверять каждый ответный пакет или повторно собирать каждый запрос /ответ.
HTTP- запросы очень редко сжимаются. Хотя может быть полезно проверить запросы на наличие или отсутствие "gzip" или "deflate" в заголовке Accept-Encoding:
.
Ответы HTTP должны иметь заголовок Content-Encoding:
содержащий gzip
или deflate
когда используется сжатие.
Что следует отметить:
- из-за большого количества ошибок браузера многие веб-серверы будут иметь список User-Agent по умолчанию, который не будет включать сжатие для
- вполне вероятно, что по умолчанию существует набор шаблонов файлов /URL или типов содержимого MIME, сжатие PDF-файлов и изображений часто не выполняется
- небольшие файлы не могут быть сжаты
В Apache одним из способов записи использования сжатия является использование mod_deflate
mod_deflate, а затем изменение директив ведения журнала. Обычно я использую по крайней мере следующее в пользовательском LogFormat
:
%>s %B %I %O %D %{instream}n/%{outstream}n/%{ratio}n%% %{Content-Type}o
который регистрирует общий размер входящего и исходящего потока, детали сжатия и тип MIME.
Я использовал httpry
для просмотра HTTP-запросов, но он не будет работать здесь, потому что ему, к сожалению, не хватает функции для проверки и записи заголовков ответов (он также не собирает пакеты или HTTP-потоки).
Две программы, которые должны предоставить необходимые детали, - это justsniffer
и xplico
(обратите внимание, хотя я никогда не использовал ни одну из них, так как они немного сложны для компиляции из-за их зависимостей, если вы можете получить бинарные пакеты для своей ОС, тогда у вас все будет в порядке),
Вы можете проверить заголовок HTTP-соединения. Если заголовок связывается с полем Content-Encoding: gzip
то содержимое распаковывается (см. Также Википедию и HTTP-протокол W3C).
Попробуйте использовать ngrep ---
В идеале вы будете знать IP-адрес, с которым общается веб-сервер, иначе вам нужно будет перехватить большинство вещей, чтобы вы могли найти запрос и ответ.
см. https://stackoverflow.com/questions/9241391/how-to-capture-all-the-http-packets-using-tcpdump