我们这个信息化时代,每天都不知不觉的会给不知道哪些软件运营商偷偷的说一些悄悄话,特别是我们程序猿,在开发过程中更是,偶尔会遇到不知道TCP
交互过程中到底传递或者接受了哪些信息,给我们的Debug
蒙上了一层神秘的面纱,这时候,我们需要一些抓包工具帮助我们轻松Debug。一般的请求可以借助浏览器自带的NetWork
抓包工具,移动端一些网页的话可以借助腾讯开源的vConsole
,再高端一点就是借助Fiddler
来抓取http
或者https
请求。但是有时候这样也满足不了我们的需要,那么就再祭出Wireshark
神器来抓取tcp
和udp
请求。
浏览器自带的抓包工具
一些主流浏览器都自带有Network
抓包工具,只需F12
即可唤出,非常方便,我这里只演示了 Chrome浏览器
的抓包过程。
Fiddler简单操作
Fiddler
是一款http\https
协议代理调试工具,它能够获取请求之间的数据和状态,设置断点,以及修改数据。首先去Fiddler网站下载并手动安装。
安装成功后打开Fiddler
,界面如下:
默认情况下,它是抓取我们所有的请求。我们需要对Fiddler
进行过滤设置。假如我们只想抓取www.cnblogs.com
的请求,我们需要这样处理:
,最后我们可以得到这样的效果:
,
还可以指定客户端的进程:
进程方式除了刚才在Filters
中设置外,还可以使用拖动方式,
下面,我们来试试抓取手机端的请求,在抓取手机端请求前,请确保手机和电脑在同一个局域网中,然后进入Tools->Options->Connections对Fiddler
进行如下设置:
,
由于我在PC端映射了一个wifi供手机连接,故我手机代理设置如下:
假如我们抓取美团App的请求,现在打开App即可看到:
这里只是一个简单的示例介绍,更多高深技巧请自行探索。
Wireshark简单操作
首先Wireshark下载,
安装完成后打开
可以看到我们本地有很多网卡驱动,我们怎么知道现在网络是哪个网卡呢?有两个方式,一个是查看本地连接,另外一个就是看界面的网络流量。
可以看到Wireshark
开始为我们抓包,由于Wireshark
为我们抓取了TCP
和HTTP
,会有很多无用的信息导致我们无从下手,这时候可以使用Wireshark
的过滤规则:
,
在过滤栏输入关键字就会有相应的智能提示。 在Wireshark
抓包中有多层信息:
Frame 15788: 79 bytes on wire (632 bits), 79 bytes captured (632 bits) on interface \Device\NPF_{69B14E8C-A0A5-4064-9CF7-EB4651D24A99}, id 0:物理层的数据帧概况。
Ethernet II, Src: HuaweiTe_22:5a:c6 (fc:48:ef:22:5a:c6), Dst: WistronI_fd:67:50 (54:ee:75:fd:67:50):数据链路层以太网帧头部信息。
Internet Protocol Version 4, Src: 10.101.11.97, Dst: 10.101.27.241:互联网层IP包头部信息,源地址和目的地址。
Transmission Control Protocol, Src Port: 80, Dst Port: 50773, Seq: 2606, Ack: 3560, Len: 25:传输层的数据段头部信息,TCP协议层信息。
Hypertext Transfer Protocol:应用层的信息,此处是
HTTP\HTTPS
协议会现在该项。Wireshark
常用过滤条件:- 地址过滤。ip.dst==xxx.xx.xxx.xxx 过滤目的地址为
xxx.xx.xxx.xxx
,ip.src==xxx.xx.xxx.xxx 过滤原地址地址为xxx.xx.xxx.xxx
,ip.dst==xxx.xx.xxx.xxx && ip.src==xxx.xx.xxx.xxx 过滤源地址为xxx.xx.xxx.xxx
且目的地址xxx.xx.xxx.xxx
- 协议过滤。直接在过滤栏输入协议即可
tcp、udp、arp、http、ftp、ssl、smtp、dns、ip、ardp
- 端口过滤。在过滤栏输入
tcp.port==端口号(目的端口和源端口)
或者tcp.dstport==端口号(目的端口)
,tcp.srcport==端口号(源端口)
- HTTP过滤。这个就比较多了,暂时详述:
- 地址过滤。ip.dst==xxx.xx.xxx.xxx 过滤目的地址为
通过Wireshark
可以很方便的分析TCP
的三次握手和四次挥手的过程,有助于我们更佳直观的理解TCP协议。
好了,暂时先告一段落吧,这里只是简单是写了软件的基本使用,如果要抓取HTTP
和HTTPS
协议的数据的话,个人建议使用Fiddler
。其他更加高级的应用在后面再分享吧。