一些命令:
- -D
印系统上可用的网络接口列表以及 tcpdump 可以捕获数据包的网络接口列表。对于每个网络接口,都会打印一个编号和一个接口名称,后面可能是接口的文本描述。可以将接口名称或编号提供给 -i 标志以指定要在其上捕获的接口。
- -i
监听接口
- -B
设置操作系统捕获缓冲区大小,以 KiB(1024 字节)为单位。
- -w -
不输出文件 而是使用标准输出
- -l
设定为标准输出行缓冲,捕获数据时查看数据
- -n
不要将地址(即主机地址、端口号等)转换为名称。
- -N
不要打印主机名的域名资格。例如,如果你给出这个标志,那么tcpdump将打印 nic'' 而不是
nic.ddn.mil’’。
- -t
不要在每个转储行上打印时间戳。
- -O
不要运行数据包匹配代码优化器。仅当您怀疑优化器中存在错误时,这才有用。
- -U
如果 没有指定-w 选项,或者如果指定了但同时指定了 --print 标志,则使打印的数据包输出 packet-buffered'';即,当每个数据包的内容描述被打印出来时,它将被写入标准输出,而不是在不写入终端时,仅在输出缓冲区填满时才写入。 如果指定了 -w 选项,则使保存的原始数据包输出
packet-buffered’’;即,当每个数据包被保存时,它将被写入输出文件,而不是仅在输出缓冲区填满时才写入。
如果tcpdump 是用 缺少 pcap_dump_flu
内容解析
文件头
首先是文件头的格式,长度为24个八位字节
文件头的格式 |
幻数 |
主要版本|次要版本 |
时区偏移 |
时间戳准确性 |
快照长度 |
链路层头类型 |
第一个字段是一个 4 字节的幻数,值为 0xa1b2c3d4。幻数,当由与写入文件的主机具有相同字节顺序的主机读取时,将具有值 0xa1b2c3d4,并且当由与写入文件的主机具有相反字节顺序的主机读取时,将具有值 0xd4c3b2a1。这允许读取文件的软件确定写入文件的主机的字节顺序是否与正在读取文件的主机的字节顺序相同,从而确定每个文件和每个文件中的值是否相同。数据包标头需要进行字节交换
示例:
212 195 178 161
2 0 4 0
0 0 0 0
0 0 0 0
0 0 4 0
1 0 0 0
如下是相反字节顺序,读取时应该反过来
161 178 195 212 # 幻数 0xa1b2c3d4
0 2 0 4 # 2 字节的文件格式主要版本号;当前版本号为 2 2 字节的文件格式次要版本号;当前版本号为 4
0 0 0 0 # 4 字节的时区偏移量;这始终为 0
0 0 0 0 # 4 字节的数字,给出文件中时间戳的准确性;这始终为 0
0 4 0 0 # 4 字节的数字,给出捕获的“快照长度”;前N字节 保存在捕获
0 0 0 1 # 4 字节的数字,给出捕获中数据包的链路层标头类型,1表示DLT_EN10MB,以太网
数据包的标头
在每个文件头之后是零个或多个数据包;每个数据包都以每个数据包的标头开头,紧随其后的是原始数据包数据。每个数据包的标头长度为 16 个八位字节。
数据包头的格式 |
时间戳,秒值 |
时间戳、微秒或纳秒值 |
抓包数据长度 |
数据包数据的未截断长度 |
示例:
98 341 17 29 # 自 1970 年 1 月 1 日 00:00:00 UTC 以来的秒数
0 11 75 249 # 微秒或纳秒时间
0 0 1 80 # 捕获数据的字节数
0 0 1 80 # 数据包数据的未截断长度
第三个字段是一个 4 字节的值,给出了每个数据包标头后面的捕获数据的字节数,以及一个 4 字节的值,给出了如果数据包没有被快照长度截断的字节数。如果数据包数据的字节数小于或等于快照长度,则这两个长度将相等。
参考
pcap-savefile - libpcap 保存文件格式
链路层报头类型