如何检查单个应用程序的传出HTTP请求?


70

我的应用程序正在将HTTP请求发送到某些服务器,我想查看它发出的实际数据。我希望看到一些细节:

  • 请求方法(GET / POST / PUT等)
  • 内容类型
  • 身体

做到这一点的最佳和简单方法是什么?


“请求方法,内容类型,正文等” 您是否在谈论特定于HTTP的检查?它是HTTPS(安全的)吗?
gertvdijk

是的,你是对的,但它不是由浏览器发送
MEGAS

抱歉,这只是HTTP请求
百万,

3
好的,那很好。它只是在与一个或一组服务器通信?而且没有其他应用程序正在与这些服务器通信吗?如果两者都是,那么关于Wireshark的答案就是我想要的。了解其工作原理。没那么难。
gertvdijk

Answers:


71

好吧,对于所有那些tcpdump粉丝=)

以根目录运行所有这些命令!!!

在终端中获取根

sudo -i

捕获RAW数据包...

sudo tcpdump -i any -w /tmp/http.log &

这将捕获所有端口上所有接口上的所有原始数据包,并将它们写入文件/tmp/http.log

运行您的应用程序。如果您不运行使用HTTP(Web浏览器)的任何其他应用程序,则显然有帮助。

tcpdump

killall tcpdump

要读取日志,请使用该-A标志并将输出通过管道传递到less

tcpdump -A -r /tmp/http.log | less

-A标志在数据包中打印出“有效载荷”或ASCII文本。这会将输出发送到less,您可以上下翻页。要退出less,请键入Q

当我去Google时,看到(在原始数据包中):

20:42:38.179759 IP ufbt.local.56852 > sea09s02-in-f3.1e100.net.www: Flags [P.], seq 1:587, ack 1, win 913, options [nop,nop,TS val 25523484 ecr 492333202], length 586
E..~.v@.@..q......!#...P.(.gS.c..............u..Xh.GET /generate_204 HTTP/1.1
Host: clients1.google.com
Connection: keep-alive
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/534.34 (KHTML, like Gecko) rekonq Safari/534.34
Referer: http://www.google.com/
Accept: */*
Accept-Encoding: gzip, deflate, x-gzip, x-deflate
Accept-Charset: utf-8,*;q=0.5
Accept-Language: en-US, en-US; q=0.8, en; q=0.6
Cookie: PREF=ID=dd958d4544461998:FF=0:TM=1323842648:LM=1360205486:S=Fg_QCDsLMr4ZepIo; NID=67=OQJWjIDHG-B8r4EuM19F3g-nkaMcbvYwoY_CsOjzvYTOAxwqAos5kfzsk6Q14E70gIfJjHat8d8PuQIloB12BE-JuSHgsKHR2QSpgN12qSWoxeqhdcSQgzw5CHKtbR_a

tcpdump从指定网络接口到端口,再到源IP地址和目标IP地址,可以使用一整套选项来优化数据收集。它不能解密(因此它不适用于HTTPS)。

一旦知道了您感兴趣的内容,便可以使用多种选项tcpdump来仅记录感兴趣的数据。一般的策略是首先记录所有数据包,检查原始数据,然后仅捕获感兴趣的数据包。

一些有用的标志(选项):

-i Specify an interface
-i eth0

tcp port xx
tcp port 80

dst 1.2.3.4
specify a destination ip address

使用tcpdump和学习如何分析您收集的数据都有一条学习曲线。为了进一步阅读,我强烈建议Daniel Miessler撰写的tcpdump带有示例的入门书籍


1
这在我的Ubuntu 14.04上无法捕获任何内容。我的笔记本电脑通过wifi路由器连接到Internet。这会对tcpdump的使用产生影响吗?当我杀死它时,它只是说0 packets captured 0 packets received by filter 0 packets dropped by kernel 但是当tcpdump监视时,我确实在Chrome浏览器中打开了很多站点。
faizal 2014年

1
啊,链接的文章有帮助。tcpdump -i any -w /tmp/http.log &工作了。
faizal 2014年

22

tcpflow从Ubuntu官方存储库首次安装:

sudo apt-get install tcpflow

然后运行以下命令以检查标准端口上的所有HTTP请求:

sudo tcpflow -p -c port 80

1
在哪里可以看到结果?谢谢!
Gediminas '18

2
@Gediminas,您可以在终端中看到输出。请注意,未显示HTTPS流量。尝试访问HTTP,例如httpvshttps.com
Vanni Totaro,

1
如果您只想查看请求并且不必处理所有TCP详细信息(syn,ack ...),则比tcpdump方便得多
herm

13

我建议您尝试Wireshark安装Wireshark

请注意,Wireshark非常先进,因此可能需要一些时间来适应。我已经有好几年没有使用它了,但是对于您所追求的东西来说,它应该仍然是完美的-即使它没有太多的功能。

有关Wireshark及其使用方法的信息,请参见Wireshark主页


1
这不适用于单个过程。你会得到界面上的所有流量,你就必须通过IP /协议等,将其过滤Wireshark的-过滤器通过处理/ PID
gertvdijk

是的,但是可以通过wireshark接口轻松实现。
Panther

2
我之前尝试过Wireshark,但它对我来说太先进了,我在寻找另一种选择
megas

4
另一个选项是tcpdump。tcpdump是一种命令行工具,可以轻松完成工作,但学习曲线更陡峭。danielmiessler.com/study/tcpdump
Panther

1
@gertvdijk-如您所愿;)随时添加基础知识
Panther

5

也可以与command一起使用,即使对于SSL,它也可以提供整洁的输出:

sudo tcpdump dst port 80
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.