Solicitações HTTP de monitoramento on-the-fly em uma interface de rede?

69

Para fins de depuração, quero monitorar as solicitações http em uma interface de rede.

Usando uma linha de comando ingênua tcpdump , recebo muitas informações de baixo nível e as informações de que preciso não estão muito claramente representadas.

Transferir o tráfego via tcpdump para um arquivo e, em seguida, usar wireshark tem a desvantagem de não estar on-the-fly.

Eu imagino um uso de ferramenta assim:

$ 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
...

Estou usando o Linux.

    
por maxschlepzig 22.01.2011 / 11:27

6 respostas

87

Experimente tcpflow :

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

A saída é assim:

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

Você pode obviamente adicionar métodos HTTP adicionais à instrução grep e usar sed para combinar as duas linhas em uma URL completa.

    
por 22.01.2011 / 23:39
21

Você pode usar o link ou o Justniffer fazer isso.

httpry está disponível, por exemplo através do repositório de pacotes do Fedora.

Exemplo de chamada:

# httpry -i em1

(onde em1 denota um nome de interface de rede)

Exemplo de saída:

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

(a saída é um pouco reduzida)

    
por 22.01.2011 / 11:48
7

Eu estava procurando por algo semelhante, com o requisito adicional de que ele deveria funcionar para link também.

Ferramentas baseadas em pcap como tcpflow httpry urlsnarf e outros tcpdump kung fu funcionam bem para http, mas para pedidos seguros você está sem sorte.

Eu criei o urldump , que é um pequeno invólucro em torno de mitmproxy .
iptables é usado para redirecionar o tráfego para o proxy, por isso funciona de forma transparente.

$ 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
...

Veja LEIA-ME para mais informações.

    
por 24.01.2016 / 17:36
1

Outra boa opção pode ser nethogs

No fedora está disponível entre os pacotes principais, e no centos você pode obtê-lo através do repo epel.

    
por 15.02.2015 / 15:44
1

Existe também o programa de linha de comando urlsnarf que faz parte do pacote dsniff (que também é empacotado com, por exemplo, o Fedora 19).

Exemplo:

# 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
[..]

(quando navega primeiro para SE e depois para spiegel.de)

Limitações: dsnarf não não suporta IPv6 . Eu posso reproduzir este relatório de bug com 0.17 no Fedora 19. Também parece estar quebrado no Ubuntu trusty atm (funciona bem sob lucidez).

    
por 29.05.2014 / 11:08
0

Acho que o Wireshark é capaz de fazer o que você quer

No lado positivo, ele é muito poderoso, você pode instalá-lo via apt-get e ele vem com uma GUI.

No entanto, o sistema de filtros é complicado - mas há bons tutoriais incorporados, e ele fornece uma visão geral ao vivo ou de início / parada do tráfego.

Digitar a palavra 'http' no filtro provavelmente fornecerá o que você está procurando (por exemplo, o tráfego principal gerado pelos usuários).

    
por 22.01.2011 / 12:22