0%

抓包工具

抓包(packet capture)就是将网络传输发送与接收的数据包进行截获、重发、编辑、转存等操作,常用来检查网络安全,被用来进行数据截取等。常用抓包工具有好多,如Charles、Wireshark、Fiddler等。

Charles

一、基础

  1. Charles(试用,Windows、Mac、Linux均支持)
    • Charles是一款代理服务器,通过过将自己设置成系统的网络访问代理服务器,然后截取请求和请求结果达到分析抓包的目的。该软件是用Java写的(安装的时候要先装好Java环境),能够在Windows,Mac,Linux上使用。
    • 主要功能:
      • 截取Http和Https网络封包。
      • 支持重发网络请求,方便后端调试。
      • 支持修改网络请求参数。
      • 支持网络请求的截获并动态修改。
      • 支持模拟慢速网络。

二、使用

  1. 安装,直接下载安装就行了
    • Charles是收费软件,可以免费试用30天。试用期过后,未付费的用户仍然可以继续使用,但是每次使用时间不能超过30分钟,并且启动时将会有10秒种的延时。
  2. 使用

Fiddler

一、基础

  1. Fiddler(试用,Windows、Mac、Linux均支持)

  2. Fiddler是一个http协议调试代理工具,它能够记录并检查所有你的电脑和互联网之间的http通讯,设置断点,查看所有的“进出”Fiddler的数据(指cookie、html、js、css等文件)。Fiddler要比其他的网络调试器要更加简单,因为它不仅仅暴露http通讯还提供了一个用户友好的格式。它是用C#写出来的,包含一个简单却功能强大的基于JScript .NET 事件脚本子系统,灵活性非常棒,可以支持众多的http调试任务,并且能够使用.net框架语言进行扩展。

    • Fiddler是通过改写HTTP代理,让数据从它那通过,来监控并且截取到数据。

二、使用


Wireshark

一、基础

  1. Wireshark(免费,Windows、Mac、Linux均支持)
  2. 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

  1. 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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
tcpdump: data link type PKTAP
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on pktap, link-type PKTAP (Apple DLT_PKTAP), capture size 262144 bytes

#三次握手过程
14:59:31.538062 IP 192.168.1.102.61636 > 110.242.68.3.https: Flags [S], seq 2834228638, win 65535, options [mss 1460,nop,wscale 6,nop,nop,TS val 1216687643 ecr 0,sackOK,eol], length 0
14:59:31.555227 IP 110.242.68.3.https > 192.168.1.102.61636: Flags [S.], seq 3797536187, ack 2834228639, win 8192, options [mss 1412,nop,wscale 5,nop,nop,nop,nop,nop,nop,nop,nop,nop,nop,nop,nop,sackOK,eol], length 0
14:59:31.555338 IP 192.168.1.102.61636 > 110.242.68.3.https: Flags [.], ack 1, win 4096, length 0

#开始双向传输数据
14:59:31.555880 IP 192.168.1.102.61636 > 110.242.68.3.https: Flags [P.], seq 1:518, ack 1, win 4096, length 517
14:59:31.569581 IP 110.242.68.3.https > 192.168.1.102.61636: Flags [.], ack 518, win 944, length 0
14:59:31.569583 IP 110.242.68.3.https > 192.168.1.102.61636: Flags [P.], seq 1:97, ack 518, win 944, length 96
14:59:31.569608 IP 192.168.1.102.61636 > 110.242.68.3.https: Flags [.], ack 97, win 4094, length 0
14:59:31.569895 IP 110.242.68.3.https > 192.168.1.102.61636: Flags [P.], seq 97:103, ack 518, win 944, length 6
14:59:31.569896 IP 110.242.68.3.https > 192.168.1.102.61636: Flags [P.], seq 103:148, ack 518, win 944, length 45
14:59:31.569911 IP 192.168.1.102.61636 > 110.242.68.3.https: Flags [.], ack 148, win 4095, length 0

....

#server端发起第一次挥手
15:00:31.959462 IP 110.242.68.3.https > 192.168.1.102.61636: Flags [F.], seq 85183, ack 2971, win 1188, length 0
#client端确认,第二次挥手
15:00:31.959554 IP 192.168.1.102.61636 > 110.242.68.3.https: Flags [.], ack 85184, win 4096, length 0

...

#中间没找到client端发起的第三次挥手,只有最后的强制断连

15:01:05.936329 IP 192.168.1.102.61636 > 110.242.68.3.https: Flags [R.], seq 2972, ack 85184, win 4096, length 0

...

三、参考

  1. 参考一
  2. 参考二
  3. 参考三
  4. 参考四
  5. 参考五
  6. 参考六