web-dev-qa-db-fra.com

Surveillance à la volée des requêtes HTTP sur une interface réseau?

À des fins de débogage, je souhaite surveiller les requêtes http sur une interface réseau.

En utilisant une ligne de commande naïve tcpdump, j'obtiens trop d'informations de bas niveau et les informations dont j'ai besoin ne sont pas très clairement représentées.

Le transfert du trafic via tcpdump vers un fichier, puis l'utilisation de wireshark a l'inconvénient de ne pas être à la volée.

J'imagine une utilisation de l'outil comme celle-ci:

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

J'utilise Linux.

84
maxschlepzig

Essayez tcpflow:

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

La sortie est comme ceci:

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

Vous pouvez évidemment ajouter des méthodes HTTP supplémentaires à l'instruction grep et utiliser sed pour combiner les deux lignes en une URL complète.

106
bahamat

Vous pouvez utiliser httpry ou Justniffer pour ce faire.

httpry est disponible par exemple via le référentiel de packages Fedora.

Exemple d'appel:

# httpry -i em1

(où em1 désigne un nom d'interface réseau)

Exemple de sortie:

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

(la sortie est un peu raccourcie)

24
X4lldux

Je cherchais quelque chose de similaire, avec l'exigence supplémentaire qu'il devrait également fonctionner pour https .

les outils basés sur pcap comme tcpflowhttpryurlsnarf et autres tcpdump kung f fonctionnent bien pour http, mais pour les demandes sécurisées, vous n'avez pas de chance.

Je suis venu avec rldump , qui est un petit wrapper autour mitmproxy .
iptables est utilisé pour rediriger le trafic vers le proxy, il fonctionne donc de manière 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
...

Voir README pour plus d'informations.

7
lemonsqueeze

Une autre bonne option pourrait être nethogs

Sur Fedora est disponible parmi les packages de base, et sur centos vous pouvez l'obtenir via le repo epel.

1
adriano72

Je pense que Wireshark est capable de faire ce que vous voulez

Sur le plan positif, il est très puissant, vous pouvez l'installer via apt-get et il est livré avec une interface graphique.

Cependant, le système de filtrage est compliqué - mais il existe de bons didacticiels intégrés, et il vous donnera un aperçu en direct ou de démarrage/arrêt du trafic.

Taper le mot `` http '' dans le filtre vous donnera probablement ce que vous recherchez (c'est-à-dire le trafic principal généré par les utilisateurs).

1
Mahmoud Hossam

Il existe également le programme de ligne de commande urlsnarf qui fait partie du package dsniff (qui est également fourni avec par exemple Fedora 19).

Exemple:

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

(lors de la navigation vers SE puis vers spiegel.de)

Limitations: dsnarf ne ne prend pas en charge IPv6 . Je peux reproduire ce rapport de bogue avec 0.17 sur Fedora 19. Semble également être cassé sous Ubuntu trusty atm (fonctionne très bien sous lucid).

1
maxschlepzig