Skip to main content

Tcpdump:示例,选项等

Tcpdump命令行网络抓包工具 - 介绍 [LinuxCast IT播客] (六月 2025)

Tcpdump命令行网络抓包工具 - 介绍 [LinuxCast IT播客] (六月 2025)
Anonim

Tcpdump是用于各种Linux操作系统(OS)的命令,用于收集通过网络适配器传递的TCP / IP数据包。与数据包嗅探工具非常相似,tcpdump不仅可以分析网络流量,还可以将其保存到文件中。

与默认情况下操作系统提供的某些命令不同,您可能会发现无法使用tcpdump,因为它未安装。要安装tcpdump,请执行 apt-get install tcpdump的 要么 yum install tcpdump,取决于您的操作系统。

Tcpdump如何工作

Tcpdump打印出与布尔匹配的网络接口上的数据包标头 表达 。它也可以用-w flag,使其将数据包数据保存到文件中以供以后分析,和/或使用-r flag,使其从保存的数据包文件中读取而不是从网络接口读取数据包。在所有情况下,只匹配的数据包 表达 将由。处理 tcpdump的 .

TCPDUMP 将,如果没有与-C 标志,继续捕获数据包,直到被SIGINT信号中断(例如,通过键入中断字符生成) 按Ctrl + C)或SIGTERM信号(通常用(1)命令);如果运行-C flag,它将捕获数据包,直到它被SIGINT或SIGTERM信号中断或已经处理了指定数量的数据包。

上面提到的开关将在本文后面详细介绍。

什么时候 tcpdump的 完成捕获数据包,它将报告计数:

  • 数据包“由过滤器接收”。
    • 这意味着取决于您运行的操作系统 tcpdump的 ,可能还有操作系统的配置方式。如果在命令行上指定了过滤器,则在某些操作系统上,它会对数据包进行计数,而不管它们是否与过滤器表达式匹配,而在其他操作系统上,它仅计算与过滤器表达式匹配的数据包并由 tcpdump的。
  • 数据包“被内核删除”。
    • 这是由于缺少缓冲区空间而丢弃的数据包数量,这是由操作系统中的数据包捕获机制实现的 tcpdump的 如果操作系统将该信息报告给应用程序,则正在运行。如果不是,则报告为0。

在支持SIGINFO信号的平台上,例如大多数BSD(Berkeley Software Distributions),它会在收到SIGINFO信号时报告这些计数(例如,通过键入“status”字符生成,通常 按Ctrl + T)并将继续捕获数据包。

Tcpdump兼容性

使用tcpdump命令从网络接口读取数据包可能需要您具有特殊权限( 读 保存的数据包文件不需要这样的权限):

  • 带有NIT或BPF的SunOS 3.x或4.x.:您必须具有读取权限 的/ dev /尼特 要么 开发/ BPF * .
  • Solaris与DLPI:您必须具有对网络伪设备的读/写访问权限,例如 的/ dev / LE 。但是,至少在某些版本的Solaris上,这还不足以允许 tcpdump的 以混杂模式捕捉;在这些Solaris版本上,您必须是root或 tcpdump的 必须将setuid安装到root,才能以混杂模式捕获。请注意,在许多(可能是所有)接口上,如果不以混杂模式捕获,则不会看到任何传出数据包,因此在混杂模式下执行捕获可能不是非常有用。
  • 带有DLPI的HP-UX:你必须是root或 tcpdump的 必须将setuid安装到root。
  • IRIX与snoop:你必须是root或 tcpdump的 必须将setuid安装到root。
  • Linux的:你必须是root或 tcpdump的 必须将setuid安装到root。
  • Ultrix和Digital UNIX / Tru64 UNIX:任何用户都可以捕获网络流量 tcpdump的 。但是,除非超级用户在该接口上启用了混杂模式操作,否则任何用户(甚至超级用户)都无法在接口上以混杂模式捕获 pfconfig (8),并且没有用户(甚至超级用户)都不能捕获接口上由机器接收或发送的单播流量,除非超级用户使用该接口启用了复制全模式操作 pfconfig 所以 有用 接口上的数据包捕获可能要求在该接口上启用混杂模式或全部模式操作或两种操作模式。
  • BSD:您必须具有读取权限 的/ dev / BPF * .

Tcpdump命令语法

与所有计算机命令一样,只有在语法正确的情况下,tcpdump命令才能正常工作:

tcpdump的 -adeflnNOpqRStuvxX -C 计数

-C 文件大小 -F 文件

-一世 接口 -m-r 文件

-s snaplen有 -T 类型 -U 用户 -w 文件

-E ALGO:秘密 表达

Tcpdump命令选项

这些是您可以使用tcpdump命令的所有选项:

  • -一个:尝试将网络和广播地址转换为名称。
  • -C:收到后退出 计数 数据包。
  • -C:在将原始数据包写入保存文件之前,请检查该文件当前是否大于 文件大小 如果是,请关闭当前保存文件并打开一个新文件。第一个savefile之后的savefiles将具有指定的名称-w 标志,后面有一个数字,从2开始并继续向上。的单位 文件大小 是数百万字节(1,000,000字节,而不是1,048,576字节)。
  • -d:将编译后的数据包匹配代码以人类可读的形式转储到标准输出并停止。
  • -dd:转储数据包匹配代码为C 程序片段。
  • 滴滴滴:转储数据包匹配代码作为十进制数字(以计数开头)。
  • -e:在每个转储行上打印链接级标题。
  • -E: 使用 ALGO:秘密 用于解密IPsec ESP数据包。算法可能是DES-CBC, 3DES-CBC, 河豚-CBC, RC3-CBC, CAST128-CBC, 要么没有。默认是DES-CBC。只有在以下情况下才能解密数据包 tcpdump的 编译时启用了加密。 秘密 ESP密钥的ascii文本。我们此时无法获取任意二进制值。该选项假定为RFC2406 ESP,而不是RFC1827 ESP。该选项仅用于调试目的,不鼓励使用此选项和真正的“秘密”密钥。通过在命令行上显示IPsec密钥,您可以通过其他人看到它 PS (1)和其他场合。
  • -F:打印“外国”互联网地址数字而不是象征性(此选项旨在解决Sun的yp服务器中的严重脑损伤 - 通常它会永远挂起翻译非本地互联网号码)。
  • -F: 使用 文件 作为过滤器表达式的输入。命令行上给出的附加表达式将被忽略。
  • -一世:听着 接口 。如果未指定, tcpdump的 在系统接口列表中搜索编号最小的已配置接口(不包括环回)。通过选择最早的比赛来打破关系。在具有2.2或更高版本内核的Linux系统上, 接口 “any”的参数可用于捕获来自所有接口的数据包。请注意,“any”设备上的捕获将不会在混杂模式下完成。
  • -l:使stdout行缓冲。如果您想在捕获数据时查看数据,则非常有用。例如,“tcpdump -l | tee dat”或“tcpdump -l> dat&tail -f dat”。
  • -m:从文件加载SMI MIB模块定义 模 。可以多次使用此选项将多个MIB模块加载到 tcpdump的 .
  • -n:不要将主机地址转换为名称。这可用于避免DNS查找。
  • -NN:不要将协议和端口号等转换为名称。
  • -N:不要打印主机名的域名限定。例如,如果你给这个标志,那么 tcpdump的 将打印“nic”而不是“nic.ddn.mil”。
  • -O:不要运行数据包匹配代码优化器。仅当您怀疑优化程序中存在错误时,此选项才有用。
  • -p: 别 将界面置于混杂模式。请注意,由于某些其他原因,界面可能处于混杂模式;因此,' - p'不能用作'ether host {local-hw-addr}或ether broadcast'的缩写。
  • -q:快速(安静)输出。打印较少的协议信息,使输出线更短。
  • -R:假设ESP / AH数据包基于旧规范:RFC1825到RFC1829。如果指定, tcpdump的 不会打印重播预防领域。由于ESP / AH规范中没有协议版本字段, tcpdump的 无法推断出ESP / AH协议的版本。
  • -r:从中读取数据包 文件 (使用-w选项创建)。如果是,则使用标准输入 文件 是“ - ''。
  • -S:打印绝对而非相对的TCP序列号。
  • -s:Snarf snaplen有 来自每个数据包的数据字节而不是默认值68;使用SunOS的NIT,最小值实际为96.六十八个字节足以用于IP,ICMP,TCP和UDP,但可能会截断来自名称服务器和NFS数据包的协议信息(见下文)。由于快照有限而截断的数据包在输出中以“| 原 '',在哪里 原 是发生截断的协议级别的名称。请注意,拍摄较大的快照会增加处理数据包所需的时间,并且有效地减少数据包缓冲量。这可能会导致数据包丢失。你应该限制 snaplen有 到最小的数字,将捕获您感兴趣的协议信息。设置 snaplen有 为0意味着使用所需的长度来捕获整个数据包。
  • -T:强制选择的数据包“ 表达 “要解释指定的 类型 。目前已知的类型是cnfp (Cisco NetFlow协议),RPC (远程过程调用),RTP (实时应用程序协议),RTCP (实时应用程序控制协议),SNMP (简单网络管理协议),增值税 (视听音频工具),和WB (分发白板)。
  • -t: 别 在每个转储行上打印时间戳。
  • -tt:在每个转储行上打印未格式化的时间戳。
  • -U:删除root权限并将用户ID更改为 用户 和组ID到主要组 用户 .
  • 注意:如果没有指定其他内容,Red Hat Linux会自动将权限删除给用户“pcap”。
  • -ttt:在每个转储行上打印当前行和上一行之间的增量(以微秒为单位)。
  • -tttt:以默认格式打印时间戳,在每个转储行上按日期继续。
  • -u:打印未解码的NFS句柄。
  • -v:(略多)详细输出。例如,打印IP数据包中的生存时间,标识,总长度和选项。还可以启用其他数据包完整性检查,例如验证IP和ICMP标头校验和。
  • -vv:更详细的输出。例如,从NFS回复数据包打印其他字段,并完全解码SMB数据包。
  • -vvv:更详细的输出。例如,telnetSBSE 选项打印完整。同 -X telnet选项也以十六进制打印。
  • -w:写入原始数据包 文件 而不是解析和打印出来。稍后可以使用-r选项打印它们。如果使用标准输出 文件 是“ - ''。
  • -X:以十六进制打印每个数据包(减去其链接级别标题)。整个数据包中的较小者或 snaplen有 将打印字节。注意,这是整个链路层分组,因此对于填充(例如,以太网)的链路层,当较高层分组比所需填充短时,也将打印填充字节。
  • -X:打印十六进制时,也打印ascii。因此如果-X 也设置,数据包以十六进制/ ascii打印。这对于分析新协议非常方便。即使-X 也没有设置,某些数据包的某些部分可能以十六进制/ ascii打印。
  • 表达 :选择要转储的数据包。如果不 表达 如果给出,网络上的所有数据包都将被转储。否则,只为其中的数据包 表达 是'真'将被抛弃。该 表达 由一个或多个组成 原语。 基元通常由一个 ID (名称或数字)前面有一个或多个限定符。有三种不同的限定符:
  • 类型 :限定符说明id名称或数字指的是什么类型的东西。可能的类型是主办, ,和港口 - 例如,'host foo','net 128.3','port 20'。如果没有类型限定符,主办 假设。
  • DIR :限定符指定到和/或来自的特定传输方向 ID 。可能的方向是SRC, DST, src或dstsrc和 DST (例如,'src foo','dst net 128.3','src或dst port ftp-data')。如果没有dir限定符,src或dst 假设。对于“空”链路层(即点对点协议,如滑动), 入站 出站 限定符可用于指定所需的方向。
  • 原 :限定符将匹配限制为特定协议。可能的原则是: , FDDI, TR, IP, IP6, 地址解析协议, RARP, DECNET, TCP,和UDP例如,'ether src foo','arp net 128.3','tcp port 21'。如果没有proto限定符,则假定所有与该类型一致的协议。例如,'src foo'表示'(ip或arp或rarp)src foo'(除了后者不是合法语法),'net bar'表示'(ip或arp或rarp)net bar'和'port 53'表示'(tcp或udp)端口53'。
    • 'fddi'实际上是'ether'的别名;解析器将它们视为“指定网络接口上使用的数据链路级别”。“FDDI报头包含类似以太网的源和目标地址,并且通常包含类似以太网的数据包类型,因此您可以仅对这些FDDI字段进行过滤与模拟以太网字段一样.FDDI标头也包含其他字段,但您不能在过滤器表达式中明确命名它们。
    • 同样,'tr'是'ether'的别名;前一段关于FDDI头的陈述也适用于令牌环头。

除了上述内容之外,还有一些不符合模式的特殊“原始”关键字:网关, 广播, , 更大,和 算术 表达式。所有这些都在下面描述。

通过使用单词构建更复杂的过滤器表达式, 要么,和 组合基元 - 例如,“主机foo而不是端口ftp而不是端口ftp-data”。为了节省类型,可以省略相同的限定符列表(例如,“tcp dst port ftp或ftp-data或domain”与“tcp dst port ftp或tcp dst port ftp-data或tcp dst port domain”完全相同。)

这些是tcpdump命令允许的原语:

  • dst主持人 主办
    • 如果数据包的IPv4 / v6目标字段是,则为True 主办 ,可以是地址或名称。
  • src主机 主办
    • 如果数据包的IPv4 / v6源字段是,则为True 主办 .
  • 主办 主办
    • 如果数据包的IPv4 / v6源或目标是,则为True 主办 。任何上述主机表达式都可以附加关键字,IP, 地址解析协议, RARP, 要么IP6,如在 ip主机 主办 (相当于 以太原型 IP 和主持人 主办)。
    • 如果 主办 是具有多个IP地址的名称,将检查每个地址是否匹配。
  • 以太 ehost
    • 如果以太网目标地址为真,则为真 ehost . Ehost 可以是来自/ etc / ethers的名称或数字(参见 醚 (3N)数字格式)。
  • 以太网 ehost
    • 如果以太网源地址为真,则为真 ehost .
  • 以太网主机 ehost
    • 如果是以太网源或目标地址,则为真 ehost .
  • 网关 主办
    • 如果使用数据包,则为True 主办 作为网关(即,以太网源或目的地址是 主办 但IP源和IP目的地都没有 主办 ).
    • 主办 必须是名称,并且必须通过机器的主机名到IP地址解析机制(主机名文件,DNS,NIS等)以及机器的主机名到以太网地址解析机制来查找(/ etc / ethers等)。
    • 一个等价的表达式 以太网主机 ehost 现在主持 主办 ,可以与名称或数字一起使用 主持人/ ehost 。)此语法此时在启用IPv6的配置中不起作用。
  • dst网
    • 如果数据包的IPv4 / v6目标地址的网络号为,则为True 净 . 净 可以是来自/ etc / networks的名称或网络号(请参阅 网络(4) 详情)。
  • src网
    • 如果数据包的IPv4 / v6源地址的网络号为,则为True 净 .
    • 如果数据包的IPv4 / v6源或目标地址的网络号为0,则为True 净 .
  • 面具 子网掩码
    • 如果IP地址匹配,则为True 净 具体而言 子网掩码 。可能合格SRC 要么DST。请注意,此语法对IPv6无效 净 .
  • 净 / LEN
    • 如果IPv4 / v6地址匹配,则为True 净 用网络掩码 LEN 比特宽。可能合格SRC 要么DST.
  • dst端口 港口
    • 如果数据包是ip / tcp,ip / udp,ip6 / tcp或ip6 / udp,并且目标端口值为 港口 。该 港口 可以是/ etc / services中使用的数字或名称(请参阅 TCP (4P)和 UDP (4P))。如果使用名称,则检查端口号和协议。如果使用数字或模糊名称,则仅检查端口号(例如,dst port 513 将打印tcp / login流量和udp / who流量,以及端口域 将打印tcp / domain和udp / domain流量)。
  • src端口 港口
    • 如果数据包的源端口值为,则为True 港口 .
  • 港口 港口
    • 如果数据包的源端口或目标端口是真,则为真 港口 。任何上述端口表达式都可以在关键字前加上,TCP 要么UDP,如在 tcp src端口 港口 ,只匹配源端口为的tcp报文 港口 .
  • 长度
    • 如果数据包的长度小于或等于,则为真 长度 。这相当于 len <= 长度 .
  • 更大 长度
    • 如果数据包的长度大于或等于,则为真 长度 。这相当于 len> = 长度 .
  • ip proto 协议
    • 如果数据包是IP数据包,则为真(请参阅 IP (4P))协议类型 协议 . 协议 可以是一个或多个名称 ICMP , ICMP6 , IGMP , IGRP , PIM , 啊 , ESP , VRRP , UDP , 要么 TCP 。请注意标识符 TCP , UDP ,和 ICMP 也是关键字,必须通过反斜杠()进行转义,在C-shell中为。请注意,此原语不会追踪协议标头链。
  • ip6 proto 协议
    • 如果数据包是协议类型的IPv6数据包,则为True 协议 。请注意,此原语不会追踪协议标头链。
  • ip6 protochain 协议
    • 如果数据包是IPv6数据包,则为True,并且包含带有类型的协议头 协议 在其协议标题链中。例如, ipv6 protochain 6 将任何IPv6数据包与协议标头链中的TCP协议标头匹配。该分组可以包含例如IPv6报头和TCP报头之间的认证报头,路由报头或逐跳选项报头。此原语发出的BPF代码很复杂,无法通过BPF优化器代码进行优化 tcpdump的 ,所以这可能有点慢。
  • ip protochain 协议
    • 相当于ip6 protochain 协议 ,但这是针对IPv4的。
  • 以太网广播
    • 如果数据包是以太网广播数据包,则为True。该 醚 关键字是可选的。
  • ip广播
    • 如果数据包是IP广播数据包,则为True。它检查全0和全1广播约定,并查找本地子网掩码。
  • 以太网组播
    • 如果数据包是以太网多播数据包,则为True。该 醚 关键字是可选的。这是''的简写'ether 0&1!= 0'.
  • ip多播
    • 如果数据包是IP多播数据包,则为True。
  • ip6组播
    • 如果数据包是IPv6多播数据包,则为True。
  • 以太原型 协议
    • 如果数据包是以太类型,则为真 协议 . 协议 可以是一个或多个名称 IP , IP6 , 地址解析协议 , RARP , 谈话 , AARP , DECNET , SCA , LAT , mopdl , moprc , 异 , STP , IPX , 要么 NETBEUI 。请注意,这些标识符也是关键字,必须通过反斜杠()进行转义。
    • 就FDDI而言(例如''fddi协议arp')和令牌环(例如''tr协议arp'),对于大多数协议,协议标识来自802.2逻辑链路控制(LLC)报头,该报头通常分层在FDDI或令牌环报头之上。
    • 在FDDI或令牌环上过滤大多数协议标识符时, tcpdump的 对于封装的以太网,仅检查所谓的SNAP格式的LLC报头的协议ID字段,其组织单元标识符(OUI)为0x000000;它不会检查数据包是否为SNAP格式,OUI为0x000000。
    • 例外情况是 异 ,为其检查LLC头的DSAP(目标服务访问点)和SSAP(源服务访问点)字段, STP 和 NETBEUI ,它检查LLC头的DSAP,和 谈话 ,它检查OUI为0x080007的SNAP格式数据包和Appletalk etype。
    • 在以太网的情况下, tcpdump的 检查大多数协议的以太网类型字段;例外情况是 异 , 树液 ,和 NETBEUI ,为此检查802.3帧,然后检查LLC头,就像它对FDDI和令牌环一样; 谈话 ,它检查以太网帧中的Appletalk etype和SNAP格式的数据包,就像它对FDDI和令牌环一样; AARP ,它在以太网帧或OUI为0x000000的802.2 SNAP帧中检查Appletalk ARP etype;和 IPX ,它检查以太网帧中的IPX etype,LLC报头中的IPX DSAP,IPX中没有LLC报头封装的802.3,以及SNAP帧中的IPX etype。
  • decnet src 主办
    • 如果DECNET源地址是,则为真 主办 ,可能是“10.123”形式的地址,或DECNET主机名。DECNET主机名支持仅适用于配置为运行DECNET的Ultrix系统。
  • decnet dst 主办
    • 如果DECNET目标地址是,则为真 主办 .
  • decnet主机 主办
    • 如果DECNET源或目标地址是,则为真 主办 .
  • IP, IP6, 地址解析协议, RARP, 谈话, AARP, DECNET, , STP, IPX, NETBEUI
    • 缩写 以太原型 p 哪里 p 是上述协议之一。
  • LAT, moprc, mopdl
    • 缩写 以太原型 p 哪里 p 是上述协议之一。注意 tcpdump的 目前不知道如何解析这些协议。
  • VLAN VLAN_ID
    • 如果数据包是IEEE 802.1Q VLAN数据包,则为True。如果 VLAN_ID 指定,仅当数据包具有指定时才为true VLAN_ID 。注意第一个VLAN 遇到的关键字 表达 更改剩余部分的解码偏移量 表达 假设数据包是VLAN数据包。
  • TCP, UDP, ICMP
    • 缩写 ip proto p 或ip6原型 p 哪里 p 是上述协议之一。
  • iso proto 协议
    • 如果数据包是协议类型的OSI数据包,则为True 协议 . 协议 可以是一个或多个名称 CLNP , ESIS , 要么 伊斯兰国 .
  • CLNP, ESIS, 伊斯兰国
    • 缩写 iso proto p 哪里 p 是上述协议之一。注意 tcpdump的 完成解析这些协议的不完整工作。
  • expr relop expr
    • 如果关系成立则为真,其中 relop 是>,<,> =,<=,=,!=和之一 EXPR 是由整数常量(以标准C语法表示),普通二元运算符+, - ,*,/,&,|,长度运算符和特殊分组数据访问器组成的算术表达式。要访问数据包内的数据,请使用以下语法: proto expr:size .

原 是其中之一, FDDI, TR, PPP,, 链接, IP, 地址解析协议, RARP, TCP, UDP, ICMP, 要么 IP6,并指示索引操作的协议层(, FDDI, TR, PPP,,和链接 都指的是链接层)。注意 tcp,udp 和其他上层协议类型仅适用于IPv4,而不适用于IPv6(将来会修复)。相对于指示的协议层的字节偏移由下式给出 EXPR . 尺寸 是可选的,表示感兴趣的字段中的字节数;它可以是一个,两个或四个,默认为一个。长度运算符,由关键字指示LEN,给出数据包的长度。

例如, 'ether 0&1!= 0'捕获所有多播流量。表达方式 'ip 0&0xf!= 5'捕获所有带有选项的IP数据包。表达方式 'ip 6:2和0x1fff = 0'仅捕获未碎片化的数据报,并且碎片化数据报的零碎片。此检查隐式应用于TCPUDP 索引操作。例如, TCP 0 始终表示TCP的第一个字节 头 ,绝不意味着介入片段的第一个字节。

一些偏移和字段值可以表示为名称而不是数值。可以使用以下协议头字段偏移: icmptype (ICMP类型字段),icmpcode (ICMP代码字段),和tcpflags (TCP标志字段)。

可以使用以下ICMP类型字段值:ICMP-ECHOREPLY, ICMP-UNREACH, ICMP-sourcequench, ICMP重定向, ICMP回声, ICMP-routeradvert, ICMP-routersolicit, ICMP-timxceed, ICMP-paramprob, ICMP-TSTAMP, ICMP-tstampreply, ICMP-IREQ, ICMP-ireqreply, ICMP-maskreq, ICMP-maskreply.

以下TCP标志字段值可用:TCP翅, TCP-SYN, TCP-RST, TCP推, TCP推, TCP-ACK, TCP-URG.

可以使用以下任何一种方式组合基元:

  • 带括号的基元和运算符组(括号对于Shell是特殊的,必须进行转义)
  • 否定('!'或`')
  • 连接('&&' 要么 '')
  • 交替('||' 要么 '要么')

否定具有最高优先权。交替和连接具有相同的优先权,并且从左到右相关联。请注意,明确 连接需要令牌,而不是并置。

如果给定的标识符没有关键字,则假定使用最新的关键字。例如, 不是主持vs和ace 是的缩写 不是主持人vs主持人。但是,这不应该与之混淆 不(主持人vs或者ace).

表达式参数可以传递给 tcpdump的 作为单个参数或多个参数,以更方便的方式。通常,如果表达式包含Shell元字符,则更容易将其作为单个引用参数传递。在解析之前,多个参数与空格连接在一起。

Tcpdump示例

tcpdump主机日落

上面的tcpdump命令用于打印到达或离开的所有数据包 日落。

tcpdump主机helios和(热或ace )

这个tcpdump示例打印之间的流量 赫利俄斯 或者 热 要么 高手。

tcpdump ip host ace而不是helios

您可以使用此tcpdump命令打印之间的所有IP数据包 高手 以及任何主持人除外 赫利俄斯。

tcpdump net ucb-ether

在上面的示例中,tcpdump打印Berkeley的本地主机和主机之间的所有流量。

tcpdump'网关snup和(端口ftp或ftp-data)'

下一个tcpdump命令示例用于通过Internet网关打印所有FTP流量 snup 。请注意,引用表达式是为了防止shell误解括号。

tcpdump ip而不是net localnet的

在上面的tcpdump示例中,该命令打印既不是源自本地主机也不是发往本地主机的流量。

tcpdump'tcp tcpflags&(tcp-syn | tcp-fin)!= 0而不是src和dst net localnet的 '

对于上面的tcpdump示例,该命令用于打印涉及非本地主机的每个TCP会话的开始和结束数据包(SYN和FIN数据包)。

tcpdump'网关snup和ip 2:2> 576'

上述命令将打印通过网关发送的长度超过576字节的IP数据包 snup。

tcpdump'ether 0&1 = 0和ip 16> = 224'

上面显示的tcpdump命令打印出的IP广播或多播数据包 不 通过以太网广播或多播发送。

tcpdump'icmp icmptype!= icmp-echo和icmp icmptype!= icmp-echoreply'

在tcpdump的最后一个示例中,该命令打印所有不是回应请求或回复的ICMP数据包(即,不ping数据包)。

Tcpdump输出格式

的输出 tcpdump的 是协议依赖的。以下给出了大多数格式的简要说明和示例。

链接级别标题。如果给出'-e'选项,则打印出链接级别标题。在以太网网络上,将打印源和目标地址,协议和数据包长度。

在FDDI网络上,' - e'选项会导致 tcpdump的 打印“帧控制”字段,源和目标地址以及数据包长度。 (“帧控制”字段控制数据包其余部分的解释。正常数据包(例如包含IP数据报的数据包)是“异步”数据包,优先级值介于0和7之间:例如,`async4”。假设这样的分组包含802.2逻辑链路控制(LLC)分组;如果是,则打印LLC标题 不 ISO数据报或所谓的SNAP数据包。

在令牌环网络上,' - e'选项导致 tcpdump的 打印“访问控制”和“帧控制”字段,源和目标地址以及数据包长度。与FDDI网络一样,假设数据包包含LLC数据包。无论是否指定了'-e'选项,都会为源路由数据包打印源路由信息。

(N.B。:以下描述假定您熟悉RFC-1144中描述的SLIP压缩算法。)

在SLIP链接上,打印出方向指示符(“I”表示入站,“O”表示出站),数据包类型和压缩信息。首先打印数据包类型。这三种类型 IP , UTCP ,和 CTCP 。没有打印更多链接信息 IP 数据包。对于TCP数据包,将在类型后打印连接标识符。如果数据包被压缩,则打印出其编码的标头。特殊情况打印出来* S + ñ 和* SA + ñ ,哪里 ñ 是序列号(或序列号和ack)已更改的量。如果不是特殊情况,则打印零个或多个更改。更改由U(紧急指针),W(窗口),A(ack),S(序列号)和I(数据包ID)指示,后跟delta(+ n或-n)或新值(= N)。最后,打印数据包中的数据量和压缩的报头长度。

例如,以下行显示了带有隐式连接标识符的出站压缩TCP数据包; ack已更改为6,序列号更改为49,数据包ID更改为6;有3个字节的数据和6个字节的压缩标头:

O ctcp * A + 6 S + 49 I + 6 3(6)

Arp / rarp数据包。 Arp / rarp输出显示请求的类型及其参数。格式旨在不言自明。以下是从主机“rlogin”开始的简短示例 RTSG 举办 CSAM :

arp who-have csam tell rtsgarp回复csam is-at CSAM

第一行说rtsg发送了一个arp数据包,要求提供互联网主机csam的以太网地址。 Csam回复其以太网地址(在此示例中,以太网地址为大写字母,互联网地址为小写)。

如果我们这样做,这看起来就不那么多余 tcpdump -n :

arp who-have 128.3.254.6告诉128.3.254.68arp回复128.3.254.6 is-at 02:07:01:00:01:c4

如果我们做了 tcpdump -e ,第一个数据包是广播的,第二个数据包是点对点的事实是可见的:

RTSG Broadcast 0806 64:arp who-have csam tell rtsgCSAM RTSG 0806 64:arp回复csam is-at CSAM

对于第一个数据包,这表示以太网源地址是RTSG,目标是以太网广播地址,类型字段包含十六进制0806(类型ETHER_ARP),总长度是64字节。

TCP数据包 (N.B.:以下描述假定您熟悉RFC-793中描述的TCP协议。如果您不熟悉该协议,则此描述和tcpdump对您没有多大用处) 。 tcp协议行的一般格式是:

src> dst:flags data-seqno ack window紧急选项

SRC 和 DST 是源和目标IP地址和端口。 旗 是S(SYN),F(FIN),P(PUSH)或R(RST)或单个“组合”的某种组合。 (没有标志)。 数据的SeqNo 描述了该数据包中数据所覆盖的序列空间部分(参见下面的示例)。 确认 是此连接上预期另一个方向的下一个数据的序列号。 窗口 是此连接上另一个方向可用的接收缓冲区空间的字节数。 URG 表示数据包中存在“紧急”数据。 选项 是尖括号中的tcp选项(例如, ).

Src,dst, 和 旗 永远存在。其他字段取决于数据包的tcp协议标头的内容,仅在适当时输出。

这是来自主机的rlogin的开头部分 RTSG 举办 CSAM .

rtsg.1023> csam.login:S 768512:768512(0)win 4096 csam.login> rtsg.1023:S 947648:947648(0)ack 768513 win 4096 rtsg.1023> csam.login :. ack 1赢4096rtsg.1023> csam.login:P 1:2(1)ack 1 win 4096csam.login> rtsg.1023 :. ack 2赢4096rtsg.1023> csam.login:P 2:21(19)ack 1 win 4096csam.login> rtsg.1023:P 1:2(1)ack 21 win 4077csam.login> rtsg.1023:P 2:3(1)ack 21 win 4077 urg 1csam.login> rtsg.1023:P 3:4(1)ack 21 win 4077 urg 1

第一行说rtsg上的tcp端口1023向端口发送了一个数据包 登录 在csam。该小号 表示 SYN 国旗被设定。数据包序列号为768512,不包含任何数据。 (符号是'first:last(nbytes)',表示'序列号 第一 最多但不包括 持续 是的 为nbytes 用户数据的字节'。)没有背驮式ack,可用的接收窗口是4096字节,并且有一个max-segment-size选项请求1024字节的mss。

Csam回复了一个类似的数据包,除了它包含rtsg的SYN的背驮式ack。 Rtsg然后acks csam的SYN。 '。'表示没有设置标志。数据包不包含数据,因此没有数据序列号。注意,ack序列号是一个小整数(1)。第一次 tcpdump的 看到tcp'对话',它会打印数据包中的序列号。在随后的会话分组中,打印当前分组的序列号与该初始序列号之间的差异。这意味着第一个之后的序列号可以被解释为对话数据流中的相对字节位置(每个方向的第一个数据字节为'1')。 '-S'将覆盖此功能,导致输出原始序列号。

在第六行,rtsg发送csam 19字节的数据(在会话的rtsg - > csam端的字节2到20)。 PUSH标志在数据包中设置。在第七行,csam表示接收到的数据由rtsg发送但不包括字节21.大多数数据显然都位于套接字缓冲区中,因为csam的接收窗口缩小了19个字节。 Csam还将一个字节的数据发送到此数据包中的rtsg。在第八行和第九行,csam将两个字节的紧急推送数据发送到rtsg。

如果快照足够小 tcpdump的 没有捕获完整的TCP标头,它尽可能多地解释标头,然后报告“| TCP ''表示其余部分无法解释。如果标题包含伪造选项(长度太小或超出标题末尾的选项), tcpdump的 报告为“ 不好选择 ''并且不解释任何其他选项(因为无法分辨它们的开始)。如果标头长度表示存在选项但IP数据报长度不足以使选项实际存在, tcpdump的 报告为“ 糟糕的hdr长度 ''.

使用特定标志组合捕获数据包。 TCP报头的控制位部分有8位:

CWR | ECE | URG |确认| PSH | RST | SYN |鳍

假设我们想要观察用于建立TCP连接的数据包。回想一下TCP在初始化新连接时使用三次握手协议;关于TCP控制位的连接顺序是:

  1. 呼叫者发送SYN。
  2. 收件人以SYN,ACK响应。
  3. 呼叫者发送ACK。

现在我们对捕获仅设置了SYN位的数据包感兴趣(步骤1)。请注意,我们不希望来自步骤2(SYN-ACK)的数据包,只是简单的初始SYN。我们需要的是一个正确的过滤表达式 tcpdump的 .

回想一下没有选项的TCP头的结构:

0 15 31-----------------------------------------------------------------|源端口|目的港|-----------------------------------------------------------------|序号|-----------------------------------------------------------------|确认号码|-----------------------------------------------------------------| HL | rsvd | C | E | U | A | P | R | S | F |窗口大小|-----------------------------------------------------------------| TCP校验和|紧急指针|-----------------------------------------------------------------

除非存在选项,否则TCP标头通常包含20个八位字节的数据。图的第一行包含八位字节0-3,第二行显示八位字节4-7等。

从0开始计数,相关的TCP控制位包含在八位字节13中:

0 7| 15| 23| 31----------------|---------------|---------------|----------------| HL | rsvd | C | E | U | A | P | R | S | F |窗口大小|----------------|---------------|---------------|----------------| |第13个八位字节| | |

让我们仔细看看octet no。 13:

| | |---------------| | C | E | U |甲| P | R | S | F | |---------------| |7 5 3 0|

这些是我们感兴趣的TCP控制位。我们将此八位字节中的位从0到7(从右到左)编号,因此PSH位为3位,而URG位为5。

回想一下,我们想要捕获只有SYN集的数据包。让我们看看如果TCP数据报到达其标头中的SYN位,那么八位字节13会发生什么:

| C | E | U |甲| P | R | S | F | |---------------| |0 0 0 0 0 0 1 0| |---------------| |7 6 5 4 3 2 1 0|

查看控制位部分,我们看到只设置了位号1(SYN)。

假设八位字节数13是网络字节顺序的8位无符号整数,则该八位字节的二进制值为:

00000010

其十进制表示为:

7 6 5 4 3 2 1 00*2 + 0*2 + 0*2 + 0*2 + 0*2 + 0*2 + 1*2 + 0*2 = 2

我们差不多完成了,因为现在我们知道如果只设置了SYN,TCP头中第13个八位字节的值,当被解释为网络字节顺序中的8位无符号整数时,必须精确为2。

这种关系可以表示为

tcp 13 == 2

我们可以使用这个表达式作为过滤器 tcpdump的 为了观看只有SYN集的数据包:

tcpdump -i xl0 tcp 13 == 2

表达式说“让TCP数据报的第13个八位字节具有小数值2”,这正是我们想要的。

现在,让我们假设我们需要捕获SYN数据包,但我们不关心是否同时设置ACK或任何其他TCP控制位。查看当设置了SYN-ACK的TCP数据报到达时,八位位组13会发生什么:

| C | E | U |甲| P | R | S | F | |---------------| |0 0 0 1 0 0 1 0| |---------------| |7 6 5 4 3 2 1 0|

第1和第4位现在设置在第13个八位位组。八位位组13的二进制值是:

00010010

转换为十进制:

7 6 5 4 3 2 1 00*2 + 0*2 + 0*2 + 1*2 + 0*2 + 0*2 + 1*2 + 0*2 = 18

我们不能只使用'tcp 13 == 18' tcpdump的 filter表达式,因为它只会选择那些设置了SYN-ACK的数据包,而不会只选择那些只有SYN设置的数据包。请记住,只要设置了SYN,我们就不关心是否设置ACK或任何其他控制位。

为了实现我们的目标,我们需要逻辑上将八位字节13的二进制值与其他值保持一致以保留SYN位。我们知道在任何情况下我们都希望设置SYN,因此我们将在逻辑上将第13个八位字节中的值与SYN的二进制值进行对比:

00010010 SYN-ACK 00000010 SYN AND 00000010(我们想要SYN)和00000010(我们想要SYN) -------- -------- = 00000010 = 00000010

我们看到,无论是否设置了ACK或其他TCP控制位,此AND操作都会产生相同的结果。 AND值的十进制表示以及此操作的结果是2(二进制00000010),因此我们知道对于具有SYN集的数据包,以下关系必须为true:

((八位组13的值)和(2))==(2)

这指向了我们 tcpdump的 过滤表达式

tcpdump -i xl0'tcp 13&2 == 2'

请注意,您应该在表达式中使用单引号或反斜杠来隐藏shell中的AND('&')特殊字符。

UDP数据包。 这种rwho数据包说明了UDP格式:

actinide.who> broadcast.who:udp 84

这就是说端口 谁 在主持人 锕系元素 发送了一个udp数据报到端口 谁 在主持人 广播 ,互联网广播地址。该数据包包含84个字节的用户数据。

某些UDP服务被识别(从源或目标端口号)和打印的更高级协议信息,特别是域名服务请求(RFC-1034/1035)和Sun RPC调用(RFC-1050)到NFS。

UDP名称服务器请求 (N.B.:以下描述假定您熟悉RFC-1035中描述的域服务协议。如果您不熟悉该协议,以下描述将毫无意义。)

名称服务器请求格式为:

src> dst:id op? flags qtype qclass name(len) h2opolo.1538> helios.domain:3+ A? ucbvax.berkeley.edu。 (37)

主办 h2opolo 问域服务器 赫利俄斯 用于与名称关联的地址记录(qtype = A) ucbvax.berkeley.edu。 查询ID为“3”。 '+'表示 希望递归 国旗被设定。查询长度为37个字节,不包括UDP和IP协议头。查询操作是正常的, 询问 ,因此省略了op字段。如果op是其他任何东西,它将被打印在'3'和'+'之间。同样,qclass是正常的, C_IN ,并省略。任何其他qclass都会在'A'之后立即打印出来。

检查一些异常并可能导致用方括号括起来的额外字段:如果查询包含答案,权限记录或附加记录部分, ancount , nscount , 要么 arcount 打印为' ñ 一个', ' ñ n',或' ñ au'在哪里 ñ 是适当的计数。如果设置了任何响应位(AA,RA或rcode)或任何“必须为零”位,则以字节2和3设置,`b2&3 = X '打印,在哪里 X 是头字节二和三的十六进制值。

UDP名称服务器响应。 名称服务器响应格式为:

src> dst:id操作rcode标记a / n / au类型数据(len) helios.domain> h2opolo.1538:3 3/3/7 A 128.32.137.3(273)helios.domain> h2opolo.1537:2 NXDomain * 0/1/0(97)

在第一个例子中, 赫利俄斯 响应来自的查询ID 3 h2opolo 有三个答案记录,三个名称服务器记录和七个附加记录。第一个答案记录是A型(地址),其数据是Internet地址128.32.137.3。响应的总大小为273字节,不包括UDP和IP标头。省略了op(查询)和响应代码(NoError),以及A记录的类(C_IN)。

在第二个例子中, 赫利俄斯 响应查询2,响应代码为不存在的域(NXDomain),没有答案,一个名称服务器,没有权限记录。 '*'表示 权威的答案 有点被设定。由于没有答案,因此没有打印任何类型,类或数据。

可能出现的其他标志字符是' - '(递归可用,RA, 不 设置)和'|' (截断的消息,TC,集)。如果'问题'部分不包含任何一个条目,' ñ q'打印出来。

请注意,名称服务器请求和响应往往很大,而且是默认值 snaplen有 68字节可能无法捕获足够的数据包进行打印。使用-s 如果您需要认真调查名称服务器流量,请添加snaplen标志。 “-s 128'对我来说效果很好。

SMB / CIFS解码。 tcpdump的 包括对UDP / 137,UDP / 138和TCP / 139上的数据进行相当广泛的SMB / CIFS / NBT解码。还完成了对IPX和NetBEUI SMB数据的一些原始解码。

默认情况下,完成相当小的解码,如果使用-v,则执行更详细的解码。请注意,使用-v单个SMB数据包可能占用一页或更多页面,因此如果您真的需要所有血腥细节,请仅使用-v。

如果要解码包含unicode字符串的SMB会话,那么您可能希望将环境变量USE_UNICODE设置为1.欢迎使用自动检测unicode字符串的补丁。

有关SMB数据包格式的信息以及所有字段的含义,请参阅您最喜欢的samba.org镜像站点上的www.cifs.org或pub / samba / specs /目录。 SMB补丁由Andrew Tridgell([email protected])编写。

NFS请求和回复。 Sun NFS(网络文件系统)请求和回复打印为:

src.xid> dst.nfs:len op args src.nfs> dst.xid:回复stat len op结果 sushi.6709> wrl.nfs:112 readlink fh 21,24 / 10.73165wrl.nfs> sushi.6709:回复ok 40 readlink“../var”sushi.201b> wrl.nfs: 144查询fh 9,74 / 4096.6878“xcolors”wrl.nfs> sushi.201b: 回复确定128查询fh 9,74 / 4134.3150

在第一行,主持人 寿司 发送带有id的事务 6709 至 WRL (请注意,src主机后面的数字是一个事务ID, 不 源端口)。请求是112个字节,不包括UDP和IP头。手术是一个 的readlink (读取符号链接)文件句柄( FH )21,24 / 10.731657119。 (如果幸运的话,就像在这种情况下一样,文件句柄可以解释为主要的次要设备号对,然后是inode号和世代号。) WRL 用链接的内容回复'ok'。

在第三行, 寿司 问 WRL 查找名称' xcolors '在目录文件9,74 / 4096.6878中。请注意,打印的数据取决于操作类型。如果与NFS协议规范一起阅读,则该格式应该是不言自明的。

如果给出-v(详细)标志,则打印附加信息。例如:

sushi.1372a> wrl.nfs: 148读取fh 21,11 / 12.195 8192字节@ 24576wrl.nfs> sushi.1372a: 回复确定1472阅读REG 100664 ids 417/0 sz 29388

(-v还会打印IP头TTL,ID,长度和碎片字段,这些字段已在此示例中省略。)在第一行中, 寿司 问 WRL 在字节偏移24576处从文件21,11 / 12.195读取8192个字节。 WRL 回复'ok';第二行显示的数据包是应答的第一个片段,因此只有1472个字节长(后续片段中将跟随其他字节,但这些片段没有NFS甚至UDP头,因此可能无法打印,取决于使用的过滤器表达式)。因为给出了-v标志,所以打印了一些文件属性(除文件数据外还返回):文件类型(“REG'',常规文件),文件模式(八进制), uid和gid,以及文件大小。

如果多次给出-v标志,则会打印更多详细信息。

请注意,NFS请求非常大,除非是打印大部分细节 snaplen有 增加了。尝试使用'-s 192'观看NFS流量。

NFS回复数据包未明确标识RPC操作。代替, tcpdump的 跟踪“最近的”请求,并使用事务ID将它们与回复进行匹配。如果回复没有严格遵循相应的请求,则可能无法解析。

Transarc AFS(安德鲁文件系统)请求和回复。

src.sport> dst.dport:rx数据包类型 src.sport> dst.dport:rx数据包类型服务调用call-name args src.sport> dst.dport:rx packet-type service reply call-name args elvis.7001> pike.afsfs: rx data fs调用重命名旧fid 536876964/1/1“.newsrc.new” 新fid 536876964/1/1“.newsrc”pike.afsfs> elvis.7001:rx data fs回复重命名

在第一行中,主机elvis发送一个RX数据包到pike。这是到fs(文件服务器)服务的RX数据包,并且是RPC调用的开始。RPC调用是重命名,旧目录文件ID为536876964/1/1,旧文件名为“.newsrc.new”,新目录文件ID为536876964/1/1,新文件名为“。 newsrc”。主机派克响应重命名调用的RPC回复(这是成功的,因为它是一个数据包而不是中止数据包)。

通常,所有AFS RPC至少由RPC调用名称解码。大多数AFS RPC至少有一些参数被解码(通常只有'有趣'的参数,对于某些有趣的定义)。

该格式旨在自我描述,但对于不熟悉AFS和RX工作的人可能没有用。

如果给出两次-v(详细)标志,则打印确认包和附加标题信息,例如RX呼叫ID,呼叫号,序列号,序列号和RX分组标志。

如果给出-v标志两次,则打印附加信息,例如RX呼叫ID,序列号和RX包标志。还从RX ack分组打印MTU协商信息。

如果给出-v标志三次,则打印安全性索引和服务标识。

打印中止数据包的错误代码,但Ubik信标数据包除外(因为中止数据包用于表示Ubik协议的是投票)。

请注意,AFS请求非常大,除非打印出许多参数 snaplen有 增加了。尝试使用`-s 256'观看AFS流量。

AFS回复数据包未明确标识RPC操作。代替, tcpdump的 跟踪“最近的”请求,并使用电话号码和服务ID将它们与回复相匹配。如果回复没有严格遵循相应的请求,则可能无法解析。

KIP Appletalk(UDP中的DDP)。封装在UDP数据报中的Appletalk DDP分组被解封装并作为DDP分组转储(即,丢弃所有UDP报头信息)。文件 /etc/atalk.names 用于将appletalk网络和节点编号转换为名称。

此文件中的行具有以下形式:

号码名称 1.254以太16.1 icsd-net1.254.110 ace

前两行给出了appletalk网络的名称。第三行给出了特定主机的名称(主机与网络中的第三个八位字节的区别 - 净数 必须 有两个八位字节和一个主机号码 必须 有三个八位字节)。数字和名称应用空格(空格或制表符)分隔。该 /etc/atalk.names 文件可能包含空行或注释行(以“#”开头的行)。

Appletalk地址以以下形式打印:

net.host.port 144.1.209.2> icsd-net.112.220office.2> icsd-net.112.220jssmag.149.235> icsd-net.2

(如果 /etc/atalk.names 不存在或不包含某些appletalk主机/网络号的条目,地址以数字形式打印。)在第一个示例中,网144.1节点209上的NBP(DDP端口2)正在发送给正在侦听的任何内容网络节点112的端口220.除了源节点的全名已知(“办公室”)之外,第二行是相同的。第三行是从net jssmag节点149上的端口235发送到在icsd-net NBP端口上广播(注意,广播地址(255)由没有主机号的网络名称指示;因此,它是一个好的在/etc/atalk.names中保持节点名称和网络名称不同的想法。

NBP(名称绑定协议)和ATP(Appletalk事务协议)数据包的内容被解释。其他协议只是转储协议名称(如果没有为协议注册名称,则为数字)和数据包大小。

NBP包 格式如下例:

icsd-net.112.220> jssmag.2:nbp-lkup 190:“=:LaserWriter @ *”jssmag.209.2> icsd-net.112.220:nbp-reply 190:“RM1140:LaserWriter @ *”250techpit.2> icsd-net.112.220:nbp-reply 190:“techpit:LaserWriter @ *”186

第一行是由net icsd主机112发送并在网络jssmag上广播的激光写入器的名称查找请求。查找的nbp id是190.第二行显示来自主机jssmag.209的此请求的回复(请注意它具有相同的id),表示它在端口250上注册了名为“RM1140”的激光编写器资源。 line是对同一请求的另一个回复,称主机techpit在端口186上注册了laserwriter“techpit”。

ATP包 以下示例演示了格式:

jssmag.209.165> helios.132:atp-req 12266 <0-7> 0xae030001helios.132> jssmag.209.165:atp-resp 12266:0(512)0xae040000helios.132> jssmag.209.165:atp-resp 12266:1(512)0xae040000helios.132> jssmag.209.165:atp-resp 12266:2(512)0xae040000helios.132> jssmag.209.165:atp-resp 12266:3(512)0xae040000helios.132> jssmag.209.165:atp-resp 12266:4(512)0xae040000helios.132> jssmag.209.165:atp-resp 12266:5(512)0xae040000helios.132> jssmag.209.165:atp-resp 12266:6(512)0xae040000helios.132> jssmag.209.165:atp-resp * 12266:7(512)0xae040000jssmag.209.165> helios.132:atp-req 12266 <3,5> 0xae030001helios.132> jssmag.209.165:atp-resp 12266:3(512)0xae040000helios.132> jssmag.209.165:atp-resp 12266:5(512)0xae040000jssmag.209.165> helios.132:atp-rel 12266 <0-7> 0xae030001jssmag.209.133> helios.132:atp-req * 12267 <0-7> 0xae030002

Jssmag.209通过请求最多八个数据包(“<0-7>”)启动与主机helios的事务ID 12266。该行末尾的十六进制数是请求中“userdata”字段的值。

Helios响应8个512字节的数据包。事务id后面的':digit'给出事务中的数据包序列号,而parens中的数字是数据包中的数据量,不包括atp头。包7上的'*'表示EOM位已设置。

然后Jssmag.209请求重传数据包3和5。 Helios重新发送它们,然后jssmag.209发布交易。最后,jssmag.209启动下一个请求。请求中的'*'表示XO('恰好一次') 不 组。

IP碎片。碎片化的互联网数据报打印如下:

(FRAG ID : 尺寸 @ 抵消 +)(FRAG ID : 尺寸 @ 抵消 )

(第一种形式表示存在更多碎片。第二种形式表示这是最后一种碎片。)

ID 是片段ID。 尺寸 是除IP头之外的片段大小(以字节为单位)。 抵消 是原始数据报中此片段的偏移量(以字节为单位)。

为每个片段输出片段信息。第一个片段包含更高级别的协议标头,并且在协议信息之后打印frag信息。第一个之后的片段不包含更高级别的协议标头,并且在源地址和目标地址之后打印frag信息。例如,以下是通过CSNET连接从arizona.edu到lbl-rtsg.arpa的ftp的一部分,该连接似乎不能处理576字节的数据报:

arizona.ftp-data> rtsg.1170 :. 1024:1332(308)ack 1 win 4096(frag 595a:328 @ 0 +)亚利桑那> rtsg:(frag 595a:204 @ 328)rtsg.1170> arizona.ftp-data :. ack 1536赢2560

这里有几点需要注意:首先,第二行中的地址不包括端口号。这是因为TCP协议信息都在第一个片段中,当我们打印后面的片段时,我们不知道端口或序列号是什么。其次,打印第一行中的tcp序列信息,好像有308字节的用户数据,实际上有512字节(第一个片段为308,第二个片段为204)。如果您正在寻找序列空间中的漏洞或尝试将磁盘与数据包匹配,这可能会欺骗您。

带有IP的数据包 不碎片 flag标有尾随(DF).

时间戳。 默认情况下,所有输出行都以时间戳开头。

HH:MM:ss.frac

时间戳是上述形式的当前时钟时间,并且与内核的时钟一样准确。时间戳反映了内核第一次看到数据包的时间。没有尝试考虑以太网接口从线路中移除数据包与内核服务“新数据包”中断之间的时间延迟。