it-swarm-ru.tech

Мониторинг HTTP-запросов на лету через сетевой интерфейс?

В целях отладки я хочу отслеживать http-запросы на сетевом интерфейсе.

Используя наивную tcpdump командную строку, я получаю слишком много низкоуровневой информации, и нужная мне информация не очень четко представлена.

Вывод трафика через tcpdump в файл и последующее использование wireshark имеет тот недостаток, что он не на лету.

Я представляю себе использование инструмента следующим образом:

$ monitorhttp -ieth0 --only-get --just-urls
2011-01-23 20:00:01 GET http://foo.example.org/blah.js
2011-01-23 20:03:01 GET http://foo.example.org/bar.html
...

Я использую Linux.

84
maxschlepzig

Попробуйте tcpflow:

tcpflow -p -c -i eth0 port 80 | grep -oE '(GET|POST|HEAD) .* HTTP/1.[01]|Host: .*'

Вывод такой:

GET /search?q=stack+exchange&btnI=I%27m+Feeling+Lucky HTTP/1.1
Host: www.google.com

Очевидно, что вы можете добавить дополнительные HTTP-методы в оператор grep и использовать sed, чтобы объединить две строки в один полный URL-адрес.

106
bahamat

Вы можете использовать httpry или Justniffer , чтобы сделать это.

httpry доступно, например через репозиторий пакетов Fedora.

Пример вызова:

# httpry -i em1

(где em1 обозначает имя сетевого интерфейса)

Пример вывода:

2013-09-30 21:35:20    192.168.0.1     198.252.206.16    >    POST    unix.stackexchange.com    /posts/6281/editor-heartbeat/edit    HTTP/1.1
2013-09-30 21:35:20    198.252.206.16  192.168.0.1       < HTTP/1.1   200    OK
2013-09-30 21:35:49    192.168.0.1     198.252.206.16    >    POST    unix.stackexchange.com    /posts/validate-body                 HTTP/1.1
2013-09-30 21:35:49    198.252.206.16  192.168.0.1       < HTTP/1.1   200    OK
2013-09-30 21:33:33    192.168.0.1      92.197.129.26    >    GET     cdn4.spiegel.de    /images/image-551203-breitwandaufmacher-fgoe.jpg    HTTP/1.1

(вывод немного сокращен)

24
X4lldux

Я искал что-то подобное, с дополнительным требованием, чтобы оно работало и для https .

инструменты на основе pcap, такие как tcpflowhttpryurlsnarf и ​​другие tcpdump kung f хорошо работают для http, но для защищенных запросов вам не повезло.

Я придумал rldump , который является маленькой оберткой вокруг mitmproxy .
iptables используется для перенаправления трафика на прокси, поэтому он работает прозрачно.

$ Sudo urldump   
http://docs.mitmproxy.org/en/stable/certinstall.html
http://docs.mitmproxy.org/en/stable/_static/js/modernizr.min.js
https://media.readthedocs.org/css/sphinx_rtd_theme.css
https://media.readthedocs.org/css/readthedocs-doc-embed.css
https://media.readthedocs.org/javascript/readthedocs-doc-embed.js
...

Смотрите README для получения дополнительной информации.

7
lemonsqueeze

Другим хорошим вариантом может быть nethogs

На Fedora доступен один из основных пакетов, а на Centos вы можете получить его через репозиторий epel.

1
adriano72

Я думаю Wireshark способен делать то, что вы хотите

С другой стороны, он очень мощный, вы можете установить его через apt-get, и он поставляется с графическим интерфейсом.

Тем не менее, система фильтрации сложна, но в нее встроены хорошие учебники, которые дадут вам обзор трафика в режиме реального времени или старт/стоп.

Ввод слова "http" в фильтр, вероятно, даст вам то, что вы ищете (то есть основной трафик, генерируемый пользователями).

1
Mahmoud Hossam

Существует также программа командной строки urlsnarf, которая является частью пакета dsniff (который также поставляется, например, с Fedora 19).

Пример:

# urlsnarf -i em1
urlsnarf: listening on em1 [tcp port 80 or port 8080 or port 3128]
jhost - - [29/May/2014:10:25:09 +0200] "GET http://unix.stackexchange.com/questions HTTP/1.1" - - "-" "Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0"
jhost - - [29/May/2014:10:25:36 +0200] "GET http://www.spiegel.de/ HTTP/1.1" - - "-" "Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0"
jhost - - [29/May/2014:10:25:36 +0200] "GET http://www.spiegel.de/layout/css/style-V5-2-2.css HTTP/1.1" - - "-" "Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0"
jhost - - [29/May/2014:10:25:36 +0200] "GET http://www.spiegel.de/layout/jscfg/http/global-V5-2-2.js HTTP/1.1" - - "-" "Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0"
jhost - - [29/May/2014:10:25:36 +0200] "GET http://www.spiegel.de/layout/js/http/javascript-V5-2-2.js HTTP/1.1" - - "-" "Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0"
jhost - - [29/May/2014:10:25:36 +0200] "GET http://www.spiegel.de/layout/js/http/interface-V5-2-2.js HTTP/1.1" - - "-" "Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0"
jhost - - [29/May/2014:10:25:36 +0200] "GET http://www.spiegel.de/layout/js/http/netmind-V5-2-2.js HTTP/1.1" - - "-" "Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0"
jhost - - [29/May/2014:10:25:36 +0200] "GET http://www.spiegel.de/favicon.ico HTTP/1.1" - - "-" "Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0"
jhost - - [29/May/2014:10:25:36 +0200] "POST http://ocsp.thawte.com/ HTTP/1.1" - - "-" "Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0"
jhost - - [29/May/2014:10:25:36 +0200] "POST http://ocsp.thawte.com/ HTTP/1.1" - - "-" "Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
[..]

(при просмотре сначала в SE, а затем в spiegel.de)

Ограничения: dsnarf не поддерживает не поддерживает IPv6 . Я могу воспроизвести этот отчет об ошибке с 0.17 в Fedora 19. Также, похоже, он не работает в Ubuntu trusty atm (отлично работает в lucid).

1
maxschlepzig