将通过
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。
#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仓库获得它。
评论
在superuser.com/questions/67428/possible-to-catch-urls-in-linux上回答了相同的问题