linux 下 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) 命令)中断为止。如果运行 tcpdump 时带有-c 标志,那么它将捕获信息包,直到它被 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

linux 下 tcpdump 命令详解如果 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。host 必须为名称,并且机器的 host-name-to-IP-address 解析机制(主机名文件、DNS 和 NIS 等)和机器的 host-name-to-Ethernet-address 解析机制(/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。port 可以为 /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 标题之间,信息包可能包含这几个标题,例如,认证标题、路由标题或逐跳点选项标题。此原语发射的伯克利数据包过滤器 (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 框架,然后检查 LLC 标题,这些操作与对 FDDI、令牌环和 802.11 的操作相同。
atalk
tcpdump 将检查以太网框架中的 AppleTalk etype 和 SNAP 格式的信息包,这些操作与对 FDDI、令牌环和 802.11 的操作相同。
aarp
tcpdump 将要么检查以太网框架中的 AppleTalk ARP etype,要么检查带有 OUI 0x000000 的 802.2 SNAP 框架中的 AppleTalk ARP etype;
ipx
tcpdump 将检查以太网框架中的 IPX etype、LLC 标题中的 IPX DSAP、IPX 的不带 LLC 标题的 802.3 封装以及 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 修饰符同义。
reason code
如果用指定 PF 原因码来记录信息包,那么为 True。已知的代码为:match、bad-offset、fragment、short、normalize 和 memory(仅适用于 OpenBSD 的 pf(4) 记录的信息包)。
action act
如果在记录信息包时 PF 采取指定操作,那么为 True。已知的操作为:传输和阻塞(仅适用于 OpenBSD 的 pf(4) 记录的信息包)
netbeui
ip、ip6、arp、rarp、atalk、aarp、decnet、iso、stp 和 ipx。

缩略语:

ether proto p

linux 下 tcpdump 命令详解其中 p 是上述协议之一。

lat、moprc 和 mopdl

缩略语:
ether proto p

linux 下 tcpdump 命令详解其中 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

linux 下 tcpdump 命令详解其中 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
如果关系成立,其中 relop 是 >、<、>=、<=、= 和 != 中的一个,expr 是算术表达式,此算术表达式由整数常量(用标准 C 语法表示)、常规二目运算符 [+、-、*、/、& 和 |]、长度运算符和特殊信息包数据存取器组成,那么为 true。要访问信息包里的数据,请使用以下语法:
proto [ expr : size ]

linux 下 tcpdump 命令详解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 并且必须转义)。
          非(“!”或“not”)。

          并置(“&&”或“and”)。
或(“||”或“or”)。

linux 下 tcpdump 命令详解“非”具有最高优先顺序。“或”和“并置”具有相同的优先顺序,并按由左向右的顺序相连。请注意,现在需要“并置”的“显式”和“标记”,而不需要“并列”。

如果给出了不带关键字的标识,那么假定使用最新的关键字。例如,not host vs and ace 是 not 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 信息包后退出。
-C file_size 在将原始信息包写入 savefile 之前,检查文件当前是否大于 file_size,如果确实如此,那么关闭当前的 savefile 并打开新的 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 来解密 IPsec ESP 信息包,该信息包的地址将写入 addr,且该信息包将包含安全参数索引值 spi。可以用逗号或换行分隔来重复此组合。
注:现在支持设置 IPv4 ESP 信息包的 secret。

算法可以为 des-cbc、3des-cbc、blowfish-cbc、rc3-cbc、cast128-cbc 或没有算法。缺省值为 des-cbc。如果安装了 libcrypto并且它在 LIBPATH 中,将只显示解密信息包的功能。

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

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

除了上述语法以外,tcpdump 命令可以使用语法文件名来读取所指定的文件。因为在接收到第一个 ESP 信息包时打开文件,因此还应该放弃可能已提供给 tcpdump 的任何特殊权限。

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

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

-F file 使用 file 作为过滤表达式的输入。忽略了命令行上给出的其他表达式。
-G rotate_seconds 按每 rotate_seconds 秒一次的频率循环使用通过 -w 选项指定的转储文件。如果与 -C 选项配合使用,那么文件名格式将为 file<count>,只要最先达到 size 变量中指定的值。否则,tcpdump 命令会在 rotate_seconds 变量中指定的时长值过去后循环使用该文件。
-i interface 在 interface 上侦听。如果未指定,tcpdump 将搜索系统 interface 列表以查找最低编号和配置的 interface(回送除外)。通过选择最早的匹配来中断间距。

通过 -D 标志显示的 interface 数字可以用作 interface 自变量。

-K 在执行硬件 TCP 校验和计算的接口上跳过 TCP 校验和验证。如果未使用该标志,那么所有出站 TCP 校验和将标记为不正确。
-l 缓存标准输出行。如果您要在捕获数据时查看数据,它很有用。例如:
tcpdump -l | tee dat
或 tcpdump -l > dat & tail -f dat

linux 下 tcpdump 命令详解

-L 列出接口和出口的已知的数据链路类型。
-m module 从 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 从 file(用 -w 选项创建)中读取信息包。如果 file 是“-”,那么使用标准输入。
-R 假定 ESP/AH 信息包基于原有的规范。

(RFC1825 至 RFC1829)。如果指定了此标志,那么 tcpdump 不会显示阻止重放字段。因为在 ESP/AH 规范中没有协议版本字段,所以tcpdump 无法演绎 ESP/AH 协议版本。

-S 显示绝对而非相对的 TCP 序号。
-s snaplen 从每一信息包捕获 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 将原始的信息包写入 file,而不对其进行语法分析,也不将其显示出来。以后可以用 -r 标志显示它们。如果 File 为“-”,那么使用标准输出。
-x 以十六进制显示每个信息包(减去其链接级别标题)。将显示整个信息包或者 snaplen 字节这两者当中的较小者。请注意,这是整个链接层信息包,因此对于填充的链接层(例如,以太网),当更高层的信息包短于必需的填充时,还将显示填充字节。
-xx 以十六进制显示每个信息包,包括其链接级别标题。
-X 以十六进制和 ASCII 显示每个信息包(减去其链接级别标题)。用于分析新协议时它非常方便。
-y datalinktype 设置在将信息包捕获到 datalinktype 时要使用的数据链路类型。
-z command 与 -C 或 -G 选项结合使用时,会导致 tcpdump 命令在 savefile 上运行指定的命令。例如,指定 -z gzip 或 -z bzip2 会导致使用 gzip 或bzip2 命令压缩每个 savefile
注:tcpdump 命令使用最低优先级将 -z 命令与捕获进程并行运行,以便不干扰捕获进程。
-Z user 由所指定的具有系统特权的用户运行 tcpdump 命令。

参数

expressions
选择要转储的信息包。如果提供了表达式,那么只会对表达式为 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 是 ether 的别名。解析器将其理解为:“在指定网络接口上使用的数据链路级”。FDDI 头部分包含类似以太网的源地址和目标地址,并经常包含类似以太网的信息包类型,因此可以在这些 FDDI 字段上进行过滤,此操作与对类似以太网字段的操作相同。FDDI 头部分还包含其他字段,但是无法在过滤表达式中对其进行命名。

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

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

通过使用单词 and、or 和 not 组合原语来构建更复杂的过滤表达式。

环境变量

必须设置 LIBPATH 环境变量,或者 libcrypto 库应该位于 -E 标志的 /usr/lib 以起作用。例如:
ksh$ LIBPATH=/opt/freeware/lib tcpdump -E"algo:secret"

linux 下 tcpdump 命令详解

退出状态

项目 描述
0 成功。
非零 错误。

安全性

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

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

示例

  1. 要显示从日落起到达或出发的所有包,请输入:
    tcpdump host sundown

    linux 下 tcpdump 命令详解

  2. 要显示 helios 与 hot 或 ace 之间的流量,请输入:
    tcpdump host helios and \( hot or ace \)

    linux 下 tcpdump 命令详解

  3. 要显示 ace 与除了 helios 之外任何主机之间的所有 IP 包,请输入:
    tcpdump ip host ace and not helios

    linux 下 tcpdump 命令详解

  4. 要显示本地主机与伯克利的主机之间的所有流量,请输入:
    tcpdump net ucb-ether

    linux 下 tcpdump 命令详解

  5. 要显示通过因特网网关 snup 的所有 ftp 流量,请输入:
    tcpdump 'gateway snup and (port ftp or ftp-data)'

    linux 下 tcpdump 命令详解

    注:将表达式用引号引起来,以防止 shell 误解括号。
  6. 要显示既不是来自本地主机也不是导向本地主机的流量(如果您的网关指向其他网络,该网络决不能连到您的本地网络上),请输入:
    tcpdump ip and not net localnet

    linux 下 tcpdump 命令详解

  7. 要显示涉及到非本地主机的每个 TCP 对话的开始和结束包(SYN 和 FIN 包),请输入:
    tcpdump 'tcp[tcpflags] & (tcp-syn|tcp-fin) != 0 and not src and d dst net localnet'

    linux 下 tcpdump 命令详解

  8. 要显示通过网关 snup 发送的长度超过 576 字节的 IP 包,请输入:
    tcpdump 'gateway snup and ip[2:2] > 576'

    linux 下 tcpdump 命令详解

  9. 要显示不是通过以太网广播或多点广播信息包发送的 IP 广播或多点广播包,请输入:
    tcpdump 'ether[0] & 1 = 0 and ip[16] >= 224'

    linux 下 tcpdump 命令详解

  10. 要显示不是回传请求/答复的所有 ICMP 包(比如,不是 ping 包),请输入:
    tcpdump 'icmp[icmptype] != icmp-echo and icmp[icmptype] != icmp-e choreply'

    linux 下 tcpdump 命令详解

标准错误

所有的错误和警告都发送到 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) 可选
 
上一篇:【转】Python实现不同格式打印九九乘法表


下一篇:ALLOCATE语句分配FORTRAN动态数组方法(转自http://blog.csdn.net/zhuxianjianqi/article/details/8067174)