抓包(packet capture)就是将网络传输发送与接收的数据包进行截获、重发、编辑、转存等操作,常用来检查网络安全,被用来进行数据截取等。常用抓包工具有好多,如Charles、Wireshark、Fiddler等。
Charles
一、基础
- Charles(试用,Windows、Mac、Linux均支持)
- Charles是一款代理服务器,通过过将自己设置成系统的网络访问代理服务器,然后截取请求和请求结果达到分析抓包的目的。该软件是用Java写的(安装的时候要先装好Java环境),能够在Windows,Mac,Linux上使用。
- 主要功能:
- 截取Http和Https网络封包。
- 支持重发网络请求,方便后端调试。
- 支持修改网络请求参数。
- 支持网络请求的截获并动态修改。
- 支持模拟慢速网络。
二、使用
- 安装,直接下载安装就行了
- Charles是收费软件,可以免费试用30天。试用期过后,未付费的用户仍然可以继续使用,但是每次使用时间不能超过30分钟,并且启动时将会有10秒种的延时。
- 使用
Fiddler
一、基础
Fiddler(试用,Windows、Mac、Linux均支持)
Fiddler是一个http协议调试代理工具,它能够记录并检查所有你的电脑和互联网之间的http通讯,设置断点,查看所有的“进出”Fiddler的数据(指cookie、html、js、css等文件)。Fiddler要比其他的网络调试器要更加简单,因为它不仅仅暴露http通讯还提供了一个用户友好的格式。它是用C#写出来的,包含一个简单却功能强大的基于JScript .NET 事件脚本子系统,灵活性非常棒,可以支持众多的http调试任务,并且能够使用.net框架语言进行扩展。
- Fiddler是通过改写HTTP代理,让数据从它那通过,来监控并且截取到数据。
二、使用
Wireshark
一、基础
- Wireshark(免费,Windows、Mac、Linux均支持)
- Wireshark(前称Ethereal)是一个网络封包分析软件。网络封包分析软件的功能是撷取网络封包,并尽可能显示出最为详细的网络封包资料。Wireshark使用WinPCAP作为接口,直接与网卡进行数据报文交换。在过去,网络封包分析软件是非常昂贵的,或是专门属于盈利用的软件,Ethereal的出现改变了这一切。在GNUGPL通用许可证的保障范围底下,使用者可以以免费的代价取得软件与其源代码,并拥有针对其源代码修改及客制化的权利。Ethereal是目前全世界最广泛的网络封包分析软件之一。
二、使用
- 下载安装
- tshark、capinfos、tshark、dumpcap、editcap、mergecap命令
- tshark -r lesson17-in-shorten.pcap -T fields -e http.response.code | grep -v ^$ | sort | uniq -c | sort -r
- tshark -r 文件名 -T fields -e http.time | grep -v ^$
- tshark -r 文件名 -T fields -e frame.number -e http.time -e tcp.stream | sort -k2 -r | head -1 | awk ‘{print $3}’ | xargs -n 1 -I {} tshark -r captured.pcap -Y “tcp.stream eq {}”
tcpdump
tcpdump(免费,Mac、Linux)
tcpdump是Unix/Linux下的抓包工具,它可以针对指定网卡、端口、协议等进行抓包。
tcpdummp可实时抓取过滤,可写入文件,可读取前一步的文件进行过滤
安装
brew install tcpdump
使用
sudo tcpdump host www.baidu.com
打开浏览器访问百度首页
回到抓包页面可看到
以
21:33:08.338975 IP 10.2.182.71.61413 > 220.181.38.149.https: Flags [S], seq 1290980111, win 65535, options [mss 1460,nop,wscale 6,nop,nop,TS val 859313791 ecr 0,sackOK,eol], length 0
为例21:33:08.338975
代表数据传输的时间IP 10.2.182.71.61414
代表发送端的主机和端口>
代表数据传输方向220.181.38.149.https
代表接收端的主机和端口号Flags代表TCP包中的标志信息,主要有以下几种:
[S]
代表SYN,表示这是一个SYN请求[.]
代表ACK,表示这是一个ACK确认包[S.]
表示这是一个SYN+ACK确认包[P.]
代表PUSH+ACK,可以是从服务器端向客户端推送,也可以从客户端向服务器端推[F]
代表FIN,关闭连接操作,client/server都可发起[F.]
表示FIN+ACK[R]
表示这是一个RST包,与F包作用相同,但RST表示连接关闭时,仍然有数据未被处理,可以理解为是强制切断连接[R.]
表示RST+ACK
seq代表序列号
ack代表确认序号,因为这是一个SYN包故没有ack
win代表滑动窗口大小
options:tcp包的option区域,具体如下:
- mss:
- nop:
- wscale:
- TS val:
- sackOK:
- sack:
length代表数据包的大小
1 | tcpdump: data link type PKTAP |