为了调试目的,我想监视网络接口上的http请求。 />
将通过tcpdump的流量转储到文件中,然后使用tcpdump的缺点是它不是即时的。 >
$ 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。

评论

在superuser.com/questions/67428/possible-to-catch-urls-in-linux
上回答了相同的问题

#1 楼

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

评论


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

–maxschlepzig
2011年1月22日23:11

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

– bahamat
2011年1月23日,0:01

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

–莫里克·帕特尔
18-10-23在9:39

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

– bahamat
18-10-28在17:02

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

–ses
19年1月17日,0:48

#2 楼

您可以使用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


(输出略有缩短)

评论


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

– Mohammed Noureldin
18年1月7日在10:42

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

–ses
19年1月17日,0:50



#3 楼

我一直在寻找类似的东西,但又增加了要求,它也必须适用于https。运气不好。

我想出了urldump,它是围绕mpmproxy的小包装。 tcpflow用于将流量重定向到代理,因此透明地工作。

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


有关详细信息,请参阅自述文件。

#4 楼

还有一个命令行程序urlsnarf,它是dsniff软件包的一部分(也与Fedora 19一起打包)。

示例: br />(首先浏览到SE,然后浏览到spiegel.de)

限制:dsnarf不支持IPv6。我可以在Fedora 19上用0.17重现此错误报告。在Ubuntu可信任的atm下,它似乎也被破坏了(在清醒的环境下工作正常)。

#5 楼

我认为Wireshark可以执行您想要的操作

从好的方面来说,它非常强大,您可以通过apt-get安装它,并且它带有GUI。

但是,过滤器系统很复杂-但是内置了很好的教程,它可以为您提供实时或实时的交通开始/停止概览。过滤器中的“ http”一词可能会为您提供所需的内容(即用户产生的主要流量)。

评论


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

–凯文M
2011年1月22日,17:10

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

–maxschlepzig
11年1月22日在18:18



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

–maxschlepzig
11年1月22日在18:27

#6 楼

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

在核心软件包中可以使用fedora,而在centos上,您可以通过epel仓库获得它。