一 下载与安装

TcpDump是Linux中强大的网络数据采集分析工具之一,根据使用者的定义对网络上的数据包进行截获的包分析工具。

# 解压libpcap-1.9.1.tar.gz
tar -xvf  libpcap-1.9.1.tar.gz
# 进入libpcap-1.9.1目录
cd libpcap-1.9.1
# 执行配置脚本
./configure
# 使用sudo编译安装
sudo make install  

# 解压tcpdump-4.9.3.tar.gz
tar -xvf tcpdump-4.9.3.tar.gz
# 进入tcpdump-4.9.3目录
cd tcpdump-4.9.3
# 执行配置脚本
./configure
# 使用sudo编译安装
sudo make install

二 参数说明

-c 指定抓取数据包的次数,达到次数后退出
-C 指定输出的文件大小
-D 列出系统中所有可以监控的网卡设备
-e 在输出行打印出数据链路头信息,例如可用于打印以太网和IEEE 802.11之类协议的MAC层地址。
-f 打印数字格式的IP地址而不是主机名
-F 将文件用作过滤器表达式的输入。命令行上给出的其他表达式将被忽略。
-G 每隔指定秒数就使用-w参数指定的文件写一次,需要指定时间格式,如果每次都会覆盖写入同一个文件。
-i 指定网卡,指定监听网络接口
-l 使标准输出变为缓冲形式
-L 列出网络接口已知的数据链路
-n 不将地址(即主机地址,端口号等)转换为名称。
-N 不打印主机名的域名。例如nic.ddn.mil打印为nic。
-P 不将网络接口设置为混杂模式
-q 快速输出,即只输出较少的协议信息
-Q 选择发送/接收方向上的哪些数据包应该被捕获。可选的值为“ in”,“ out”和“ inout”。并非在所有平台上都可用。
-r 从指定的文件中读取数据,一般是-w保存的文件
-S 打印绝对而不是相对的TCP序列号。
-T 将监听到的包直接解析为指定的类型的报文,常见的类型有rpc(远程过程调用)和snmp(简单网络管理协议)
-t 不打印时间戳
-tt 输出非格式化的时间戳,将时间戳打印为从1970年1月1日以来的秒数(以UTC为单位)
-ttt 输出本行和前面以后之间的时间差。单位为微秒或纳秒,具体取决于 --time-stamp-precision选项。默认值为微秒。
-w 将原始数据包写入文件,而不是解析并打印出来。以后可以使用-r选项打印它们。
-W 指定文件数
-x 解析和打印时,除了打印每个数据包的标题外,还以十六进制打印每个数据包的数据(减去其链接级别的标题)。
-xx 解析和打印时,除了打印每个数据包的标头外,还以十六进制打印每个数据包的数据, 包括其链接级别标头。
-X 解析和打印时,除了打印每个数据包的标题外,还以十六进制和ASCII打印每个数据包的数据(减去其链接级别的标题)。
-XX 解析和打印时,除了打印每个数据包的标头外,还以十六进制和ASCII码打印每个数据包的数据, 包括其链接级别标头。
-y 数据链接类型

三 表达式

  • 数据类型
    host:主机
    port:端口
    net:网址
  • 数据传输方向
    src、dst、dst or src、dst and src
    src:源地址
    dst:目标地址
  • 协议
    ip、arp、rarp、tcp、udp等
  • 运算类型
    or、and、not、!
  • 功能类型
    gateway、less、broadcast、greater

四 小例子

  • 查看当前需要抓包的网卡
    先使用ifconfig名称查看对外的ip地址的网卡名称
    我这里是en0
  • 过滤网卡
    tcpdump -I en0
  • 过滤ip地址
    指定一个IP:
    tcpdump -i en0 host 14.215.177.39
    tcpdump -i en0 host www.baidu.com
    排除地址:
    tcpdump -i en0 host not 14.215.177.39
    指定两个个IP:tcpdump -i en0 host 14.215.177.39 or 118.123.2.248
  • 指定数据传输方向
    抓取本机接收到百度发来的数据包:
    tcpdump -i en0 src www.baidu.com
    抓取本机接发送给百度的数据包:
    tcpdump -i en0 dst www.baidu.com
  • 指定端口
    抓取本地443端口的数据包:
    tcpdump port 443
    (不指定网口则默认是第一块非回环地址的网口)
    抓取本机与B站443端口通信的数据包
    tcpdump host www.bilibili.com and port 443
  • 抓取指定协议的数据包
    指定arp协议:
    tcpdump arp
    抓取主机112.45.120.13接收和发出的tcp协议的ssh的数据包:
    tcpdump tcp port 22 and host 112.45.120.13
  • 抓取数据包存到本地磁盘
    tcpdump host www.bilibili.com -w bb.cap
  • 读取本地的cap数据包文件
    tcpdump -r bb.cap
    只看其中与112.45.120.4地址通信的数据:
    tcpdump host 112.45.120.4 -r bb.cap
    解析显示数据包:
    tcpdump host 112.45.120.4 -XX -r bb.cap