在网络接口上实时监视HTTP请求?


79

出于调试目的,我想监视网络接口上的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。


Answers:


100

尝试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

显然,您可以在grep语句中添加其他HTTP方法,并用于sed将这两行合并为一个完整的URL。


的优点tcpflow是,它已经在Ubuntu 10.04的默认存储库中可用(justsniffer,httpry不可用)。软件包信息指出IP片段未正确记录-不知道,如果这对本用例而言很重要-也许justsniffer可以更好地处理它们。
maxschlepzig 2011年

由于您只是在获取URL,因此似乎无关紧要。Tcpflow将按在接口上接收到的顺序显示数据包。因此,如果您尝试捕获文件内容,则可能会收到乱序发送的数据包,并产生损坏的文件。但是问题中列出了您的用例,我认为这对您有用。您还可以加宽grep(或删除-o)以查看更多数据包数据以进行排序或以后的其他操作。
bahamat 2011年

@bahamat“ tcpflow”可以与https URL一起使用吗?
Maulik patel,

答案是否定的。过去,SSL足够脆弱,如果您可以访问用于流的密钥,则可以解密与该密钥一起使用的所有流量。今天,大多数站点都将使用完全向前保密和协商临时密钥。当今最好的选择是所谓的“线下颠簸”透明代理。
bahamat

1
在使用wifi浏览时一无所获:sudo tcpflow -p -c -i wlo2端口80 | grep -oE'(GET | POST | HEAD)。* HTTP / 1。[01] |主机:。*'
ses

23

您可以使用httpryJustniffer来做到这一点。

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

(输出略有缩短)


如何显示请求或响应的标题或正文?
Mohammed Noureldin

什么都没有sudo httpry -i wlo2(其中wlo2通过wifi设备名称)
ses

7

我一直在寻找类似的东西,并增加了它也应该适用于https的要求。

基于pcap的工具(例如tcpdump功夫)tcpflow httpry urlsnarf和其他tcpdump功夫工具对于HTTP来说效果很好,但是对于安全请求,您却不走运。

想到urldump,它是围绕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
...

有关更多信息,请参见自述文件。


1

我认为Wireshark有能力做您想要的

从正面来看,它非常强大,您可以通过apt-get进行安装,并附带一个GUI。

但是,过滤器系统很复杂-但是内置了不错的教程,它将为您提供实时的或开始/停止的流量概览。

在过滤器中输入“ http”一词可能会为您提供所需的内容(即用户产生的主要流量)。


想知道为什么这被否决了。Wireshark可以即时读取接口并过滤为http流量。
凯文M

@Kevin M,嗯,我没有拒绝您的回答。但是说句公道话,您的回答有点不完整,而且题外话。1)它错过了有关应如何精确使用Wireshark的详细信息,即应使用过滤器,确切的过滤器表达式等。2)它不允许像问题中所概述的那样使用命令行-即使我可以使用GUI方法时,默认视图将显示GET请求,其中的域名不会并排显示-对于草绘的用例而言并不方便。
maxschlepzig 2011年

我的意思是:s /您的答案/恐惧症的答案/
maxschlepzig

1

另一个不错的选择可能是nethogs

在fedora上,核心软件包中都可用,在centos上,您可以通过epel存储库获得它。


1

还有一个命令行程序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。我可以在Fedora 19上用0.17重现此错误报告。在Ubuntu可信任的atm下,它似乎也被破坏了(在清晰的环境下工作正常)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.