1. 简介


tcpdump是一个用于截取网络分组,并输出分组内容的工具。根据使用者的定义对网络上的数据包进行截获。

tcpdump针对网络网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句辅助去掉无用的信息。

其官网地址为:tcpdump官网,在官网中存在完整的英文说明文档

2. 常用tcpdump语法


抓包选项

-A 以ASCII格式打印出所有分组,并将链路层的头最小化
-c 仅抓取指定数量的分组
-i 指定监听的网络接口
-n 对地址以数字方式显示,否则显示为主机名
-nn 除了-n的作用外,还把端口显示为数值,否则显示端口服务器
-P 指定要抓取的包是流入还是流出的包。可以给定的值为"in""out""inout"
-XX 输出包的头部数据,会以16进制和ASCII两种方式同时输出,更详细
-v 当分析和打印的时候,产生详细的输出
-w 将抓包数据输出到文件中
-r 从给定的数据包文件中读取数据

2.1 tcpdump表达式

表达式用于筛选输出哪些类型的数据包,如果没有给定表达式,所有的数据包都将输出,否则输出表达式为true的包。在表达式中出现的shell元字符建议使用单引号包围。

一个基本的表达式单元格式为:tcpdump [options] [not] proto dir type

1. proto:通过给定协议限定匹配的数据包类型
常用的协议有:tcp/udp/arp/ip/ether/icmp等
2. dir:指定ID的方向
可以给定的值包括src/dst/src or dst/src and dst
3. type:指定ID的类型
可以给定的值有host/net/port/portrange

2.2 tcpdump示例

  1. 监视指定网络接口的数据包

    # tcpdump -i eth1
  2. 监视指定主机的数据包

    # tcpdump host 1.1.1.1
    # tcpdump -i eth1 src host 1.1.1.1
    # tcpdump -i eth1 dst host 1.1.1.1

抓取主机为1.1.1.1的网络数据
指定源地址,1.1.1.1
指定目的地址,1.1.1.1

  1. 监视指定端口

    # tcpdump -i eth1 port 25
    # tcpdump -i eth1 src port 25
    # tcpdump -i eth1 dst port 25
  2. 网络过滤

    # tcpdump -i eth1 net 1.1
    # tcpdump -i eth1 src net 1.1
    # tcpdump -i eth1 dst net 1.1
  3. 监视指定协议

    # tcpdump -i eth1 arp
    # tcpdump -i eth1 ip
    # tcpdump -i eth1 tcp
    # tcpdump -i eth1 udp
    # tcpdump -i eth1 icmp
  4. 示例语句

    抓取经过eth1接口,目的地址为1.1.1.1或1.1.1.2端口是80的tcp数据
    # tcpdump -i eth1 '((tcp) and (port 80) and ((dst host 1.1.1.1) or (dst host 1.1.1.2)))'