tcpdump 命令

用途

在网络上转储流量

语法

tcpdump [ -a ] [ -A ] [ -B buffer_size ] [ -d ] [ -D ] [ -e ] [ -f ] [ -l ] [ -K ] [ -L ] [ -M secret ] [ -r file ]] [ -n ] [ -N ] [ -O ] [ -p ] [ -q ] [ -Q [ -V ]] [ -R ] [ -S ] [ -t ] [ -T ] [ -u ] [ -U ] [ -v ] [ -x ] [ -X ] [ -c count ] [ -C file_size ] [ -F file ] [ -G rotate_seconds ] [ -i interface ] [ -s snaplen ] [ -w file ] [ -E addr ] [ -y datalinktype ] [-z command ] [-Z user ] [ expression ]

描述

tcpdump 命令在与布尔表达式匹配的网络接口上打印包的头。 您可以运行带有 -w 标志的命令,以将包数据保存在文件中进行进一步分析。 您还可以运行带有 -r 标志的命令,以从已保存的包文件读取数据,而不是从网络接口读取包。 在所有情况下,只有与表达式匹配的包由 tcpdump 命令处理。

如果未使用 -c 标志运行,那么 tcpdump 将继续捕获信息包,直到它被 SIGINT 信号 (通常为 control-C) 或 SIGTERM 信号 (通常为 kill(1) 命令) 中断为止。 如果使用 -c 标志运行 tcpdump ,那么它将捕获信息包,直到它被 SIGINT 或 SIGTERM 信号中断或处理了指定数目的信息包为止。

tcpdump 命令在捕获所有包后返回以下计数:
“过滤器接收”的信息包
对所有信息包进行计数,而不管是否通过过滤表达式对其进行匹配。
“内核删除”的信息包
由于缺乏缓冲区空间而删除的信息包数。

允许的原语

dst host host
如果信息包的 IPv4/v6 目标字段为 host(它可以为地址或者名称),那么为 True。
src host host
如果信息包的 IPv4/v6 源字段为 host,那么为 True。
host host
如果信息包的 IPv4/v6 源或目标为 host,那么为 True。 以上任何 host 表达式可前置关键字 ip、arp、rarp 或 ip6,如在 ip host host 中所示,ip host host 等同于以下内容:
ether proto \ip and host host
如果 host 是带有多个 IP 地址的名称,那么会检查每个地址是否相匹配。
ether dst ehost
如果以太网目标地址为 ehost,那么为 True。 Ehost 可以是来自 /etc/ethers 的名称或数字 (请参阅 ethers (3N) 以获取数字格式)。
ether src ehost
如果以太网源地址为 ehost,那么为 True。
ether host ehost
如果以太网源地址或目标地址为 ehost,那么为 True。
gateway host
如果信息包使用 host 作为网关,那么为 True。 例如,以太网源地址或目标地址为 host,但是 IP 源和 IP 目标都不是 host。 主机必须是名称,并且必须由机器的主机名到 IP 地址解析机制 (主机名文件, DNS , NIS 等) 找到。 并通过机器的主机名到以太网地址解析机制 (/etc/ethers, 等)。 等效的表达式为 ether host ehost,而不是可以结合 host/ehost 的名称或数字使用的 host host。 此时在支持 IPv6 的配置中语法不起作用。
dst net net
如果信息包的 IPv4/v6 目标地址有一个网络号 net,那么为 True。
src net net
如果信息包的 IPv4/v6 源地址有一个网络号 net,那么为 True。
net net
如果信息包的 IPv4/v6 源地址或目标地址有一个网络号 net,那么为 True。
net net mask netmask
如果 IP 地址与带有特定网络掩码的 net 相匹配,那么为 True。 这可能受到 src 或 dst 限定。 此语法对于 IPv6 网络无效。
net net/len
如果 IPv4/v6 地址与带有网络掩码长度位范围的 net 相匹配,那么为 True。 可能受到 src 或 dst 限定。
dst port port
如果信息包为 ip/tcp、ip/udp、ip6/tcp 或 ip6/udp,并具有目标端口值 port,那么为 True。 端口可以是 /etc/services 中使用的数字或名称 (请参阅 tcp (4P) 和 udp (4P))。 如果使用了名称,那么检查端口号和协议。 如果使用了数字或者有歧义的名称,那么将只检查端口号(例如,dst port 513 将同时显示 tcp/login 流量和 udp/who 流量,并且端口域将同时显示 tcp/domain 和 udp/domain 流量)。
src port port
如果信息包具有源端口值 port,那么为 True。
port port
如果信息包的源或目标端口为 port,那么为 True。 以上任何 port 表达式都可以前置关键字 tcp 或 udp,如 tcp src port port 中所示,tcp src port port 仅与源端口为 port 的 tcp 信息包相匹配。
less length
如果信息包的长度小于或等于 length,那么为 True。 这等价于 len <= length。
greater length
如果信息包的长度大于或等于 length,那么为 True。 这相当于 :len> = length。
ip proto protocol
如果信息包为 protocol 类型协议的 IP 信息包,那么为 True。 protocol 可以为一个数字或以下名称之一:icmp、icmp6、igmp、igrp、pim、ah、esp、vrrp、udp 或 tcp。 请注意,标识 tcp、udp 和 icmp 还是关键字,必须通过反斜杠(\)(在 C-shell 中为 \\)进行转义。 请注意,此原语不追踪协议标题链。
ip6 proto protocol
如果信息包为 protocol 类型协议的 IPv6 信息包,那么为 True。 请注意,此原语不追踪协议标题链。
ip6 protochain protocol
如果信息包为 IPv6 信息包,并包含协议标题(在其协议标题链中带有类型协议),那么为 True。 例如,ip6 protochain 6 与任何 IPv6 信息包(在协议标题链中带有 TCP 协议标题)都相匹配。 在 IPv6 标题和 TCP 标题之间,信息包可能包含这几个标题,例如,认证标题、路由标题或逐跳点选项标题。 此原语发出的 Berkeley 包过滤器 (BPF) 代码很复杂,无法由 tcpdump中的 BPF 优化器代码进行优化,因此这可能有些缓慢。
ip protochain protocol
等价于 ip6 protochain protocol。 但是,此项用于 IPv4。
ether broadcast
如果信息包是以太网广播信息包,那么为 True。 ether 关键字为可选。
ip broadcast
如果信息包是 IPv4 广播信息包,那么为 True。 它检查全 0 和全 1 的广播约定,并查找已在其上完成捕获的接口上的子网掩码。

如果已在其中完成了捕获的接口的子网掩码不可用,例如,因为已在其中完成了捕获的接口没有网络掩码,那么无法正确执行此检查。

ether multicast
如果信息包是以太网多点广播信息包,那么为 True。 ether 关键字为可选。 它是 ether[0] & 1 != 0 的缩略语。
ip multicast
如果信息包是 IP 多点广播信息包,那么为 True。
ip6 multicast
如果信息包是 IPv6 多点广播信息包,那么为 True。
ether proto protocol
如果信息包为 ether 类型协议,那么为 True。protocol 可以为数字或以下名称之一:ip、ip6、arp、rarp、atalk、aarp、decnet、sca、lat、mopdl、moprc、iso、stp、ipx 或 netbeui。 请注意,这些标识也是关键字,并且必须通过反斜杠(\)进行转义。
[在 FDDI(例如,“fddi protocol arp”)、令牌环(例如,“tr protocol arp”)和 IEEE 802.11 无线 LAN(例如,“wlan protocol arp”)的情况下,对于大部分这些协议,协议标识来源于 802.2 逻辑链路控制(LLC)标题,此标题通常位于 FDDI、令牌环或 802.11 标题的顶层。 为 FDDI、令牌环或 802.11 上的大多数协议标识进行过滤时,对于封装的以太网,tcpdump 仅检查 LLC 标题的协议标识字段是否是带有组织单元标识(OUI)0x000000 的所谓 SNAP 格式;它不检查信息包是否是带有 OUI 0x000000 的 SNAP 格式。 异常如下:
iso
tcpdump 检查 LLC 头的 DSAP (目标服务访问点) 和 SSAP (源服务访问点) 字段。
stp and netbeui
tcpdump 检查 LLC 头的 DSAP。
atalk
tcpdump 使用 OUI 0x080007 和 AppleTalk etype 来检查 SNAP 格式的包。
对于以太网, tcpdump 会检查其中大部分协议的以太网类型字段。 异常如下:
iso、sap 和 netbeui
tcpdump 会检查 802.3 机架,然后像检查 FDDI ,令牌环和 802.11一样检查 LLC 头。
atalk
tcpdump 检查以太网帧中的 AppleTalk etype 以及 SNAP 格式的包,就像检查 FDDI ,令牌环和 802.11一样。
aarp
tcpdump 检查以太网机架或 OUI 为 0x000000; 的 802.2 SNAP 机架中的 AppleTalk ARP etype
ipx
tcpdump 将检查以太网帧中的 IPX etype , LLC 头中的 IPX DSAP , IPX 的 802.3-with-no-LLC-header 封装以及 SNAP 帧中的 IPX etype。
decnet src host
如果 DECNET 源地址为 host,它可能是格式 10.123 的地址,也可能是 DECNET 主机名。 [DECNET 主机名支持只在经过配置以运行 DECNET 的 Ultrix 系统上可用。]
decnet dst host
如果 DECNET 目标地址为 host,那么为 True。
decnet host host
如果 DECNET 源地址或目标地址为 host,那么为 True。
ifname interface
如果信息包记录为来自指定接口,那么为 True。
on interface
与 ifname 修饰符同义。
rnr num
如果信息包记录为与指定 PF 规则号码相匹配,那么为 True(仅适用于 OpenBSD 的 pf(4) 记录的信息包)。
rulenum num
与 rnr 修饰符同义。
原因码
如果用指定 PF 原因码来记录信息包,那么为 True。 已知代码包括 :match , bad-offset , fragment , short , normalize 和 memory (仅适用于由 OpenBSD的 pf(4)记录的信息包)。
action act
如果在记录信息包时 PF 采取指定操作,那么为 True。 已知操作包括 :pass 和 block (仅适用于由 OpenBSD的 pf(4)记录的包)
netbeui
ip、ip6、arp、rarp、atalk、aarp、decnet、iso、stp 和 ipx。

缩略语:

ether proto p
其中 p 是上述协议之一。

lat、moprc 和 mopdl

缩略语:
ether proto p
其中 p 是上述协议之一。 请注意, tcpdump 当前不知道如何解析这些协议。
vlan [vlan_id]
如果包是 IEEE 802.1Q VLAN 包,那么为 True。 如果指定了 vlan_id,那么仅具有所指定 vlan_id 的包才为 True。 请注意,在表达式中迂到的第一个 vlan 关键字会在假定包是 VLAN 包的情况下更改其余表达式的解码偏移量。
tcp、udp 和 icmp
缩略语:
ip proto p or ip6 proto p
其中 p 是上述协议之一。
iso proto protocol
如果信息包是 protocol 类型协议的 OSI 信息包,那么为 True。 protocol 可以为数字或以下名称之一:clnp、esis 或 isis。
clnp、esis 和 isis
缩略语:
  • iso proto p
其中 p 是上述协议之一。
l1、l2、iih、lsp、snp、csnp 和 psnp
IS-IS PDU 类型的缩略语。
vpi n
如果信息包是用于 Solaris 上 SunATM 的 ATM 信息包,并带有虚路径标识 n,那么为 True。
vci n
如果信息包是用于 Solaris 上 SunATM 的 ATM 信息包,并带有虚拟信道标识 n,那么为 True。
lane
如果信息包是用于 Solaris 上 SunATM 的 ATM 信息包,并且是 ATM LANE 信息包,那么为 True。 请注意,如果假定信息包是 LANE 模拟以太网信息包,或者是 LANE LE Control 信息包,那么在表达式中遇到的第一个 lane 关键字更改了在表达式其余部分中完成的测试。 如果未指定 lane,那么在假定信息包是封装 LLC 的信息包的情况下完成测试。
llc
如果信息包是用于 Solaris 上 SunATM 的 ATM 信息包,并且是封装 LLC 的信息包,那么为 True。
oamf4s
如果信息包是用于 Solaris 上 SunATM 的 ATM 信息包,并且是段 OAM F4 流单元(VPI=0 和 VCI=3),那么为 True。
oamf4e
如果信息包是用于 Solaris 上 SunATM 的 ATM 信息包,并且是端到端 OAM F4 流单元(VPI=0 和 VCI=4),那么为 True。
oamf4
如果信息包是用于 Solaris 上 SunATM 的 ATM 信息包,并且是段或端到端 OAM F4 流单元(VPI=0 和(VCI=3 | VCI=4)),那么为 True。
oam
如果信息包是用于 Solaris 上 SunATM 的 ATM 信息包,并且是段或端到端 OAM F4 流单元(VPI=0 和(VCI=3 | VCI=4)),那么为 True。
metac
如果信息包是用于 Solaris 上 SunATM 的 ATM 信息包,并且位于元信令环路(VPI=0 和 VCI=1)上,那么为 True。
bcc
如果信息包是用于 Solaris 上 SunATM 的 ATM 信息包,并且位于广播信令环路(VPI=0 和 VCI=2)上,那么为 True。
sc
如果信息包是用于 Solaris 上 SunATM 的 ATM 信息包,并且位于信令环路(VPI=0 和 VCI=5)上,那么为 True。
ilmic
如果信息包是用于 Solaris 上 SunATM 的 ATM 信息包,并且位于 ILMI 环路(VPI=0 和 VCI=16)上,那么为 True。
connectmsg
如果信息包是用于 Solaris 上 SunATM 的 ATM 信息包,并位于信令环路,而且是 Q.2931 设置、呼叫进程、连接、连接 ACK、发布或发布完成消息,那么为 True。
metaconnect
如果信息包是用于 Solaris 上 SunATM 的 ATM 信息包,并位于元信令环路,而且是 Q.2931 设置、呼叫进程、连接、发布或发布完成消息,那么为 True。
expr relop expr
True if the relation holds, where relop is one of >, <, >=, <=, =, !=, and expr is an arithmetic expression composed of integer constants (expressed in standard C syntax), the normal binary operators [+, -, *, /, &, |], a length operator, and special packet data accessors. 要访问信息包里的数据,请使用以下语法:
proto [ expr : size ]
Proto 是 ether、fddi、tr、wlan、ppp、slip、link、ip、arp、rarp、tcp、udp、icmp 或 ip6 其中之一,并且表明索引操作的协议层。 (ether、fddi、wlan、tr、ppp、slip 和 link 都称为链接层。) 请注意,tcp、udp 和其他上层协议类型仅适用于 IPv4,而不是 IPv6(以后将对其进行修订)。 与表明的协议层相关的字节偏移量由 expr 给定。 size 为可选,它表明兴趣字段里的字节数;它可以为 1、2 或 4,缺省值为 1。 由关键字 len 表示的长度运算符给定信息包的长度。

例如,ether[0] & 1 != 0 捕获所有多点广播流量。 表达式 ip[0] & 0xf !=5 捕获带有选项的所有 IP 信息包。 表达式 ip[6:2] & 0x1fff = 0 仅捕获未分段的信息包和分段信息包的片段零。 此检查隐式适用于 tcp 和 udp 索引操作。 例如,tcp[0] 始终表示 TCP 标题的第一个字节,而从不表示插入片段的第一个字节。

某些偏移量和字段值可以表达为名称而不是数字值。 以下协议标题字段偏移量可用:icmptype(ICMP 类型字段)、icmpcode(ICMP 代码字段)和 tcpflags(TCP 标志字段)。

以下 ICMP 类型字段值可用:icmp-echoreply、icmp-unreach、icmp-sourcequench、icmp-redirect、icmp-echo、icmp-routeradvert、 icmp-routersolicit、icmp-timxceed、icmp-paramprob、icmp-tstamp、icmp-tstampreply、icmp-ireq、icmp-ireqreply、icmp-maskreq 和 icmp-maskreply。

以下 TCP 标志字段值可用:tcp-fin、tcp-syn、tcp-rst、tcp-push、tcp-ack 和 tcp-urg。

组合原语

用括号括起的原语组和运算符组(括号特定于 Shell 并且必须转义)。
          Negation (`!' or `not').

          Concatenation (`&&' or `and').

          Alternation (`||' or `or').
“非”具有最高优先顺序。 “或”和“并置”具有相同的优先顺序,并按由左向右的顺序相连。 请注意,现在需要“并置”的“显式”和“标记”,而不需要“并列”。

如果给出了不带关键字的标识,那么假定使用最新的关键字。 例如,not host vs and acenot host vs and host ace 的缩略语,不应与 not ( host vs or ace ) 混淆。

可以将表达式自变量作为单个自变量或作为多个自变量 (以更方便的方式为准) 传递到 tcpdump 。 通常,如果表达式包含 Shell 元字符,将其作为单个的、加引号的自变量来传递会更容易。 多自变量在语法分析之前以空格并置。

标志

描述
-a 尝试将网络地址和广播地址转换为名称。
-A 以 ASCII 显示每个信息包(去掉它的链接级别的头)。 方便捕获 Web 页面。
-B buffer_size 指示缓冲区大小(以千字节计)。 将接受较小的值。 如果缓冲区大小小于 BPF 设置的最低值,那么将忽略实际缓冲区大小并使用伯克利数据包过滤器 (BPF) 设置的值。 如果未指定 -B 选项,那么缓冲区大小缺省为 32,768。
-c Count 在接收 Count 信息包后退出。
-C 文件大小 在将原始包写入 savefile之前,请检查该文件当前是否大于 file_size ,如果是,请关闭当前的 savefile 并打开新的 savefile。 第一个 savefile 之后的保存文件具有使用 -w 标志指定的名称,后面有一个数字,从 2 开始并继续向上。 file_size 的单位是百万字节 (1,000,000 字节,而不是 1,048,576 字节)。
-d 将编译过的信息包匹配代码转储至标准输出,然后停止。
-D 打印系统上可用的网络接口以及 tcpdump 可以捕获包的网络接口列表。 显示每个网络接口的数字和接口名称(可能带有此接口的文本描述)。 接口名称或数字可以提供给 -i 标志以指定要捕获的接口。
-dD 将信息包匹配代码作为 C 程序片段进行转储。
-ddd 将信息包匹配代码作为十进制数进行转储(添加在某个计数前面)。
-e 在每一转储行上显示链接级别标题。
-E addr 使用 spi@ipaddr algo:secret 对寻址到 addr 且包含安全参数索引值 spi的 IPsec ESP 包进行解密。 可以用逗号或换行分隔来重复此组合。
注: 现在支持设置 IPv4 ESP 包的私钥。

算法可以为 des-cbc3des-cbcblowfish-cbcrc3-cbccast128-cbc 或没有算法。 缺省值为 des-cbc。 仅当安装了 libcrypto 并且它位于 LIBPATH 中时,才能对包进行解密。

secret 为 ESP 密钥的 ASCII 文本。 如果在前面添加 0x,那么将读取十六进制值。

此选项采用 RFC2406 ESP,而不是 RFC1827 ESP。 此选项仅用于调试用途,使用此选项时不鼓励带有真密钥。 通过将 IPsec 密钥显示在命令行上,您可以通过 ps (1) 和其他场合使其对其他人可见。

除上述语法外, tcpdump 命令可能使用语法文件名来读取指定的文件。 该文件是在接收到第一个 ESP 包时打开的,因此应该已放弃 tcpdump 可能已授予的任何特殊许可权。

-f 以数字而非符号方式显示外来 IPv4 地址。

通过使用在其上执行捕获的接口的 IPv4 地址和网络掩码来完成外来 IPv4 地址的测试。 如果该地址或网络掩码不可用,那么此选项不会正确发挥作用。

-F 文件 使用 file 作为过滤表达式的输入。 忽略了命令行上给出的其他表达式。
-G 旋转秒 每隔 rotate_seconds 秒旋转一次使用 -w 选项指定的转储文件。 如果与 -C 选项结合使用,那么如果首先达到 大小 变量中指定的值,那么文件名将采用 file <count>格式。 否则,当 rotate_seconds 变量中指定的值经过时, tcpdump 命令会旋转该文件。
-i 接口 侦听 interface。 如果未指定, tcpdump 将在系统 interface 列表中搜索编号最低的 interface (不包括回送)。 通过选择最早的匹配来中断间距。

-D 标志打印的 interface 数字可用作 interface 参数。

-K 在执行硬件 TCP 校验和计算的接口上跳过 TCP 校验和验证。 如果未使用该标志,那么所有出站 TCP 校验和将标记为不正确。
-l 使 stdout 行缓冲。 如果您要在捕获数据时查看数据,它很有用。 例如:
tcpdump -l | tee dat
  or  
tcpdump -l   >   dat & tail -f dat
-L 列出接口和出口的已知的数据链路类型。
-m 模块 module 文件装入 SMI MIB 模块定义。 可以多次使用此选项将多个 MIB 模块装入到 tcpdump中。
-M 通过使用 TCP-MD5 选项(请求注释 (RFC) 2385),使用 secret 作为用于验证 TCP 分段中 digest 的共享 secret。
-n 阻止将主机地址和端口号转换为名称。
-N 省略显示主机名的域名限定。 例如, tcpdump 显示 nic 而不是 nic.ddn.mil
-O 防止 tcpdump 运行包匹配代码优化器。 这仅在怀疑优化器中存在错误时有用。
-p 停止使接口处于混合方式。 请注意,由于某种其他原因,接口可能处于混合方式; 因此,不能将 -p 用作 ether host {local-hw-addr}ether broadcast的缩写。
-q 快速输出。 因为显示更少协议信息,所以输出行更短。
-q 对已记录的数据启用已过滤的系统跟踪。 必须运行 AIX® 跟踪守护程序以记录与网络通信子系统相关的所选系统事件。
-r 文件 file (使用 -w 选项创建) 读取包。 如果 file 为 "-" ,那么将使用标准输入。
-R 假定 ESP/AH 信息包基于原有的规范。

(RFC1825 至 RFC1829)。 如果指定了此选项,那么 tcpdump 不会打印防止重放字段。 由于 ESP/AH 规范中没有协议版本字段,因此 tcpdump 无法推断 ESP/AH 协议的版本。

-S 显示绝对而非相对的 TCP 序号。
-s 快照 每个包中的数据的 snarf snaplen 字节,而不是缺省值 68。 68 字节足以用于 IP , ICMP , TCP 和 UDP ,但可能会截断名称服务器和 NFS 包中的协议信息 (请参阅下文)。 由于快照受限而截断的信息包在输出中使用 [| |proto] 指示,其中 proto 是发生截断的协议级别的名称。 请注意,采用更大的快照将增加它处理信息包的时间,并有效减少信息包缓冲的数量。 这可能会导致丢失信息包。 您应该将 snaplen 限制为捕获您感兴趣的协议信息的最小数目。 将 snaplen 设置为 0 意味着使用所需的长度来捕获整个包。
-t 强制将 expression 选择的包解释为指定类型。 当前已知的类型有 cnfp(Cisco 网络流量协议)、rpc(远程过程调用)、rtp(实时应用协议)、rtcp(实时应用控制协议)、snmp(简单网络管理协议)、tftp(次要文件传输协议)、vat(可视音频工具)、和 wb(分布式白板)。
-t 在每一转储行上省略时间戳记显示。
-tt 在每一转储行上显示未格式化的时间戳记。
-ttt 在每一转储行上显示当前行和先前行之间的变化量(以微秒为单位)。
-tttt 在每一转储行上显示前面带有日期的缺省格式的时间戳记。
-ttttt 在每一转储行上显示当前行和第一行之间的变化量(以微秒为单位)。
-U 显示未译码的 NFS 句柄。
-U 使输出通过 -w 选项 (例如, "packet-buffered") 保存。 保存了每个信息包之后,就会将它写入输出文件,而不是仅当输出缓冲区填满时才将它写入。
-v 指定稍微详细些的输出。 例如,显示 IP 信息包中的生存时间、标识、总长度和选项。 还启用其他信息包完整性检查,例如,验证 IP 和 ICMP 标题校验和。
-vv 甚至比 -v更详细的输出。 例如,从 NFS 显示其他字段,并对应答包进行完全译码。
-vvv 甚至比 -vv更详细的输出。 例如, telnet SB ... SE 选项全部打印。 使用 -X Telnet 选项也以十六进制打印。
-V 设置套接字的套接字调试标志(SO_DEBUG 套接字选项)和跟踪级别。 此标志必须与 -Q 标志一起使用。
-w 文件 将原始的信息包写入 file,而不对其进行语法分析,也不将其显示出来。 以后可以用 -r 标志显示它们。 如果 File 为“-”,那么使用标准输出。
-x 以十六进制显示每个信息包(减去其链接级别标题)。 将显示整个信息包或者 snaplen 字节这两者当中的较小者。 请注意,这是整个链接层信息包,因此对于填充的链接层(例如,以太网),当更高层的信息包短于必需的填充时,还将显示填充字节。
-xx 以十六进制显示每个信息包,包括其链接级别标题。
-X 以十六进制和 ASCII 显示每个信息包(减去其链接级别标题)。 用于分析新协议时它非常方便。
-y 数据链接类型 设置在将信息包捕获到 datalinktype 时要使用的数据链路类型。
-z 命令 -C-G 选项结合使用时,会导致 tcpdump 命令在 savefile 上运行指定的命令。 例如,通过使用 Gzipbzip2 命令指定 -z gzip-z bzip2 compresses each savefile
注: tcpdump 命令通过使用最低优先级来并行运行 -z 命令,以便不会干扰捕获过程。
-Z 用户 由所指定的具有系统特权的用户运行 tcpdump 命令。

参数

表达式
选择要转储的信息包。 如果提供了表达式,那么只会对表达式为 true 的信息包进行转储;否则,将转储网络中的所有信息包。
表达式由一个或多个原语构成。 原语通常由前面带有一个或多个限定符的标识(名称或数字)构成。 存在三种不同的限定符:
  • type 限定符说明标识名称或数字所引用的原语类型。 可能的类型为 host、net 和 port。 例如,“host foo”、“net 128.3”和“port 20”。 如果没有类型限定符,那么将采用 host。
  • dir 限定符指定到标识和/或来自标识的特定传输方向。 可能的方向为 src、dst、src 或 dst 和 src 以及 dst。 如果没有 dir 限定符,那么将采用 src 或 dst。 对于某些链接层(例如,SLIP)和某些其他设备类型,入站和出站限定符可以用来指定希望的方向。
  • proto 限定符将匹配限制为特定协议。 可能的协议为 fddi、tr、wlan、ip、ip6、arp、rarp、decnet、tcp 和 udp。 如果没有 proto 限定符,那么将采用与该类型一致的所有协议。

fddi 是以太网的别名。 解析器将其理解为:“在指定网络接口上使用的数据链路级”。 FDDI 头部分包含类似以太网的源地址和目标地址,并经常包含类似以太网的信息包类型,因此可以在这些 FDDI 字段上进行过滤,此操作与对类似以太网字段的操作相同。 FDDI 头部分还包含其他字段,但是无法在过滤表达式中对其进行命名。

fddi类似, trwlan 是以太的别名。 上一段有关 FDDI 头部分的论述还适用于令牌环和 802.11 无线 LAN 头部分。 对于 802.11 头部分,目标地址为 DA 字段,源地址为 SA 字段;不测试 BSSID、RA 和 TA 字段。

除以上所述之外,还有一些特殊的“原语”关键字不遵循这种模式:网关、广播、小于、大于和算术表达式。 所有这些关键字描述如下。

通过使用单词 andornot 组合原语来构建更复杂的过滤表达式。

环境变量

必须设置 LIBPATH 环境变量,或者 libcrypto 库应该在 /usr/lib 中, -E 标志才能工作。 例如:
ksh$ LIBPATH=/opt/freeware/lib tcpdump -E"algo:secret"

退出状态

描述
0 成功
非零 错误

安全性

从网络接口读取信息包需要对 /dev/bpf*(通常是仅 root 用户) 的读访问权。 从文件读取信息包除了文件读许可权之外,不需要任何特殊权限。

RBAC 用户注意: 此命令可以执行特权操作。 只有特权用户才能执行特权限定的操作。 有关权限和特权的更多信息,请参阅 安全性中的 "特权命令数据库"。 要获取与此命令相关联的特权和权限的列表,请参阅 lssecattr 命令或 getcmdattr 子命令。

示例

  1. 要显示从日落起到达或出发的所有包,请输入:
    tcpdump host sundown
  2. 要显示 helios 与 hot 或 ace 之间的流量,请输入:
    tcpdump host helios and \( hot or ace \)
  3. 要显示 ace 与除了 helios 之外任何主机之间的所有 IP 包,请输入:
    tcpdump ip host ace and not helios
  4. 要显示本地主机与伯克利的主机之间的所有流量,请输入:
    tcpdump net ucb-ether
  5. 要显示通过因特网网关 snup 的所有 ftp 流量,请输入:
    tcpdump 'gateway snup and (port ftp or ftp-data)'
    注: 将表达式括起来以防止 shell 错误解释括号。
  6. 要显示既不是来自本地主机也不是导向本地主机的流量(如果您的网关指向其他网络,该网络决不能连到您的本地网络上),请输入:
    tcpdump ip and not net localnet
  7. 要显示涉及到非本地主机的每个 TCP 对话的开始和结束包(SYN 和 FIN 包),请输入:
    tcpdump 'tcp[tcpflags] & (tcp-syn|tcp-fin) != 0 and not src and d dst net localnet'
  8. 要显示通过网关 snup 发送的长度超过 576 字节的 IP 包,请输入:
    tcpdump 'gateway snup and ip[2:2] > 576'
  9. 要显示不是通过以太网广播或多点广播信息包发送的 IP 广播或多点广播包,请输入:
    tcpdump 'ether[0] & 1 = 0 and ip[16] >= 224'
  10. 要显示不是回传请求/答复的所有 ICMP 包(比如,不是 ping 包),请输入:
    tcpdump 'icmp[icmptype] != icmp-echo and icmp[icmptype] != icmp-e choreply'

标准错误

所有错误和警告都将发送到 stderr

限制

跨越 "夏令时" 更改的包跟踪给出了偏差的时间戳记 (时间更改将被忽略)。

在除了令牌环头部分中的那些字段之外的字段中的过滤表达式会错误地处理源路由令牌环信息包。

在 802.11 头部分中的那些字段之外的字段中的过滤表达式会错误地处理带有 To DS 和 From DS 集合的 802.11 数据包。

ip6 proto 应该追踪标题链,但在此时它未进行此操作。 为此工作情况提供了 ip6 protochain。

传输层头部分的算术表达式类似于 tcp[0],对 IPv6 信息包不起作用。 它仅查看 IPv4 信息包。

包跟踪在 WPAR 环境中不起作用,因为底层 BPF 驱动程序无法识别 WPAR

文件

描述
/usr/sbin/tcpdump tcpdump 命令的位置。
/usr/lib/libpcap.a  
/dev/bpf*  
/opt/freeware/lib/libcrypto.a(libcrypto.so) 可选