抓包

抓包(Packet Capture)是一种网络数据监控和分析技术,用于捕获和记录通过网络传输的数据包。通过抓包,你可以查看网络上的数据流量,分析网络协议,诊断网络问题,甚至进行安全审计。

常见的抓包工具有:Wireshark、tcpdump、Fiddler、Burp Suite 等

tcpdump

网络上的流量、数据包,非常的多,因此要想抓到我们所需要的数据包,就需要我们定义一个精准的过滤器,把这些目标数据包,从巨大的数据包网络中抓取出来。

tcpdump 的各种参数:

img

  1. option 可选参数:将在后边一一解释。
  2. proto 类过滤器:根据协议进行过滤,可识别的关键词有: tcp, udp, icmp, ip, ip6, arp, rarp,ether,wlan, fddi, tr, decnet
  3. type 类过滤器:可识别的关键词有:host, net, port, portrange,这些词后边需要再接参数。
  4. direction 类过滤器:根据数据流向进行过滤,可识别的关键字有:src, dst,同时你可以使用逻辑运算符进行组合,比如 src or dst

输出的内容结构

1
2
3
4
5
6
7
8
9
21:26:49.013621 IP 172.20.20.1.15605 > 172.20.20.2.5920: Flags [P.], seq 49:97, ack 106048, win 4723, length 48

1. 时分秒毫秒
2. 网络协议 IP
3. 发送方 IP 和端口号
4. 箭头表示方向
5. 接收方 IP 和端口号
6. :冒号
7. 数据包内容,包括Flags 标识符,seq 号,ack 号,win 窗口,数据长度 length,其中 [P.] 表示 PUSH 标志位为 1

Flags 标识符

在 TCP 报文Flags,会有:

  • S:SYN
  • P:PSH
  • F:FIN
  • R:RST
  • .:没有 Flag,可能是 ACKURG

常规过滤规则

  1. 基于 IP 地址过滤:host

    1
    2
    3
    4
    5
    6
    7
    
    $ tcpdump host 192.168.10.100
    
    # 根据源ip进行过滤
    $ tcpdump -i eth2 src 192.168.10.100
    
    # 根据目标ip进行过滤
    $ tcpdump -i eth2 dst 192.168.10.200
    
  2. 基于网段过滤:net

    1
    2
    3
    4
    5
    6
    7
    
    $ tcpdump net 192.168.10.0/24
    
    # 根据源网段进行过滤
    $ tcpdump src net 192.168
    
    # 根据目标网段进行过滤
    $ tcpdump dst net 192.168
    
  3. 基于端口过滤:port

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    
    $ tcpdump port 8088
    
    # 根据源端口进行过滤
    $ tcpdump src port 8088
    
    # 根据目标端口进行过滤
    $ tcpdump dst port 8088
    
    # 同时指定两个端口
    $ tcpdump port 80 or port 8088
    $ tcpdump port 80 or 8088
    
    # 指定一个端口范围
    $ tcpdump portrange 8000-8080
    $ tcpdump src portrange 8000-8080
    $ tcpdump dst portrange 8000-8080
    
    # 常见协议
    $ tcpdump tcp port http
    
  4. 基于协议:proto

    1
    
    $ tcpdump icmp
    

    protocol 可选值:ip, ip6, arp, rarp, atalk, aarp, decnet, sca, lat, mopdl, moprc, iso, stp, ipx, or netbeui

可选参数解析

  1. 设置不解析域名提升速度

    • -n:不把ip转化成域名,直接显示 ip,避免执行 DNS lookups 的过程,速度会快很多
    • -nn:不把协议和端口号转化成名字,速度也会快很多
    • -N:不打印出host 的域名部分.
  2. 过滤结果输出到文件

    1
    
    $ tcpdump icmp -w icmp.pcap
    

    再使用 wireshark 打开

  3. 从文件中读取包数据

    1
    
    $ tcpdump icmp -r all.pcap
    
  4. 控制详细内容的输出

    • v: 详细
    • vv: 更详细
    • vvv: 更更详细
  5. 控制时间的显式

    • -t: 不输出时间
    • -tt: 会输出时间戳
    • -ttt: 输出每两行打印的时间间隔(以毫秒为单位)
    • -tttt: 在每行打印的时间戳之前添加日期的打印(此种选项,输出的时间最直观)
  6. 显式数据包头部

    • -x
    • -xx
    • -X
    • -XX
  7. 过滤指定网卡的数据包

    • -i

……

我常用的

1
2
3
4
5
6
7
8
9
$ tcpdump -i any -nnvvv icmp

$ tcpdump tcp dst port 80

# 抓取 3 个来源为 192.168.10.32 的 ping 包
$ tcpdump -c3 -nnvvv icmp and src 192.168.10.32 

# 抓取 10.10.10.11 的包,保存下来
$ tcpdump -i any -nnvvv host 10.10.10.11 -w ftp-pasv.cap