时间记录:2019-11-24
TcpDump帮助文档
tcpdump是linux下一款很好用的网络抓包工具,方便实用。记录下其使用的方式及注意事项。其支持的命令参数繁多,包含了执行网卡参数,执行输出内容,指定抓取的次数等,功能比较强大,且安装起来十分的方便
命令参数:
tcpdump [-aAbdDefhHIJKlLnNOpqStuUvxX#] [ -B size ] [ -c count ]
[ -C file_size ] [ -E algo:secret ] [ -F file ] [ -G seconds ]
[ -i interface ] [ -j tstamptype ] [ -M secret ] [ --number ]
[ -Q|-P in|out|inout ]
[ -r file ] [ -s snaplen ] [ --time-stamp-precision precision ]
[ --immediate-mode ] [ -T type ] [ --version ] [ -V file ]
[ -w file ] [ -W filecount ] [ -y datalinktype ] [ -z postrotate-command ]
[ -Z user ] [ expression ]
描述信息:
Tcpdump在网络接口上打印出与布尔表达式匹配的数据包内容的描述。 该描述之前带有时间戳,默认情况下以小时,分钟,秒和自午夜以来的一秒的分数打印。 它也可以与-w标志一起运行,这将导致它将数据包数据保存到文件中以供以后分析,和/或与-r标志一起运行,这将使其从已保存的数据包文件中读取而不是读取数据包。 从网络接口。 它也可以与-V标志一起运行,这将使其读取已保存的数据包文件列表。 在所有情况下,tcpdump仅处理与表达式匹配的数据包。
Tcpdump(如果未与-c标志一起运行)将继续捕获数据包,直到它被SIGINT信号(例如,通过键入您的中断字符,通常是control-C生成)或SIGTERM信号 ( 通常由kill生成 ) 中断为止 (1) 命令 ); 如果与-c标志一起运行,它将捕获数据包,直到被SIGINT或SIGTERM信号中断或指定数量的数据包已被处理为止。
当tcpdump完成捕获数据包时,它将报告以下内容:
packets [captured]:
这是tcpdump已接收和处理的数据包数量
packets [received by filter]:
含义取决于运行tcpdump的操作系统,还可能取决于操作系统的配置方式-如果在命令行上指定了过滤器,则在某些操作系统上,它将对数据包进行计数,无论它们是否与 过滤器表达式,即使它们与过滤器表达式匹配,无论tcpdump是否已读取和处理它们,在其他OS上,无论tcpdump是否已读取和处理它们,它都仅计算与过滤器表达式匹配的数据包, 在其他操作系统上,它仅计算与过滤器表达式匹配并由tcpdump处理的数据包
packets [dropped by kernel]
如果操作系统向应用程序报告该信息,则这是运行tcpdump的操作系统中由于缺少缓冲区空间而导致的数据包捕获机制丢弃的数据包数量; 如果不是,则报告为0 。在支持SIGINFO信号的平台上,例如大多数BSD(包括macOS)和Digital / Tru64 UNIX,它将在收到SIGINFO信号时报告这些计数(例如,通常通过键入’‘status’‘字符生成) control-T,尽管在某些平台上(例如macOS),默认情况下未设置’‘status’'字符,因此必须使用stty(1)进行设置才能使用它)并将继续捕获数据包。 在不支持SIGINFO信号的平台上,可以使用SIGUSR1信号实现相同的功能。将SIGUSR2信号与-w标志一起使用将强制将数据包缓冲区刷新到输出文件中。从网络接口读取数据包可能要求您具有特殊特权; 有关详细信息,请参见pcap(3PCAP)手册页。 读取保存的数据包文件不需要特殊的特权。
参数含义:
-A
以ASCII打印每个数据包(减去其链接级别标题), 方便捕获网页。
-b
以ASDOT表示法而不是ASPLAIN表示法打印BGP数据包中的AS编号
-B
缓冲区大小,捕获数据显示
–buffer-size=buffer_size
将操作系统捕获缓冲区大小设置为buffer_size,以KiB(1024字节)为单位。
-c
计数 收到计数包后退出。
-C file_size
在将原始数据包写入保存文件之前,请检查文件当前是否大于file_size,如果是,则关闭当前保存文件并打开一个新文件。第一个保存文件之后的保存文件将具有-w 标志指定的名称,后跟 一个数字,从1开始并向上延伸。file_size的单位是数百万个字节(1,000,000字节,而不是1,048,576字节)。
-d
以人类可读的形式将编译后的数据包匹配代码转储到标准输出并停止。
-dd
将数据包匹配代码转储为 C 程序片段。
-ddd
将数据包匹配代码转储为十进制数字(带计数)。
-D
–list-interfaces
打印系统上可用的网络接口列表,tcpdump 可以在该网络接口上 捕获数据包。对于每个网络接口,将打印一个数字和一个接口名称,并可能在其后显示该接口的文本描述。可以将接口名称或编号提供给 -i 标志,以指定要捕获的接口。这对于没有命令列出它们的系统(例如Windows系统或缺少ifconfig -a的 UNIX系统)很有用 。该数字在Windows 2000和更高版本的系统上非常有用,在Windows 2000和更高版本的系统上,接口名称是一个有点复杂的字符串。该 -D 如果标志将不被支持 的tcpdump 与旧版本的内置 的libpcap 缺少该 函数pcap_findalldevs(3PCAP) 功能。
-e
在每个转储行上打印链接级标题。例如,可用于打印诸如以太网和IEEE 802.11之类的协议的MAC层地址。
-E
使用spi @ ipaddr algo:secret解密发送到addr并包含安全参数索引值 spi的 IPsec ESP数据包。可以用逗号或换行符分隔重复此组合。请注意,目前支持为IPv4 ESP数据包设置密钥。算法可以是 des-cbc, 3des-cbc, blowfish-cbc, rc3-cbc, cast128-cbc或 无。默认值为des-cbc。只有在启用了加密功能的情况下编译tcpdump时,才具有解密数据包的能力。secret是ESP密钥的ASCII文本。如果以0x开头,则将读取一个十六进制值。该选项假定使用RFC2406 ESP,而不是RFC1827 ESP。该选项仅用于调试目的,不建议将此选项与真正的“秘密”密钥一起使用。通过在命令行上显示IPsec秘密密钥,您可以通过ps(1)和其他场合将其公开给他人 。除了上述语法之外,语法文件名还可以用于tcpdump读取提供的文件。在收到第一个ESP数据包后打开该文件,因此应该已经放弃了tcpdump可能已经赋予的任何特殊权限。
-f
用数字而不是符号打印“外部” IPv4地址(此选项旨在解决Sun NIS服务器中严重的脑损伤-通常永久挂起翻译本地的Internet号码)。使用在其上进行捕获的接口的IPv4地址和网络掩码来完成对“外部” IPv4地址的测试。如果该地址或网络掩码不可用,则该地址可用,或者是因为正在执行捕获的接口没有地址或网络掩码,或者是因为正在Linux的“ any”接口上进行了捕获,该接口可以在多个接口上进行捕获,此选项将无法正常工作。
-F file
将文件用作过滤器表达式的输入。命令行上给出的其他表达式将被忽略。
-G rotation_seconds
如果指定,则 每隔rotate_seconds秒旋转一次使用-w选项指定的转储文件 。保存文件的名称由-w指定,该名称 应包含strftime(3)定义的时间格式 。如果未指定时间格式,则每个新文件都将覆盖前一个文件。只要生成的文件名不是唯一的,tcpdump就会覆盖先前存在的数据。因此,建议不要提供比捕获周期要粗的时间规范。如果与-C 选项一起使用 ,文件名将采用 file 的形式。
-h
–help
打印tcpdump和libpcap版本字符串,打印用法消息,然后退出。
– version
打印tcpdump和libpcap版本字符串并退出。
-H
尝试检测802.11s草案网格标头。
-i
接口
–interface = interface
在界面上收听。如果未指定,则tcpdump在系统接口列表中搜索编号最少的已配置的向上接口(不包括环回),例如可能是eth0。在具有2.2或更高版本内核的Linux系统上,可以使用 接口 参数any''从所有接口捕获数据包。请注意,在
任何’‘设备上的捕获不会在混杂模式下完成。如果 支持-D标志 ,则在系统上没有接口将该名称作为名称的情况下,可以将该标志打印的接口号用作 接口参数。
-I
–monitor-mode
将接口置于“监视模式”;仅在IEEE 802.11 Wi-Fi接口上支持此功能,并且在某些操作系统上仅支持此功能。
请注意,在监控器模式下,适配器可能会与与其关联的网络解除关联,因此您将无法使用该适配器使用任何无线网络。如果您以监视方式捕获并且未使用其他适配器连接到另一个网络,则这可能会阻止访问网络服务器上的文件或解析主机名或网络地址。
该标志将影响-L 标志的输出 。如果 未指定-I,则仅显示那些不在监视模式下可用的链路层类型;如果 指定-I,则仅显示在监视方式下可用的那些链路层类型。
–immediate-mode
以“立即模式”捕获。在这种模式下,数据包一到达便立即传递到tcpdump,而不是为了提高效率而进行缓冲。如果将数据包打印到终端而不是文件或管道,则在打印数据包而不是将数据包保存到保存文件’‘时是默认设置。
-j tstamp_type
–time-stamp-type = tstamp_type
将捕获的时间戳记类型设置为tstamp_type。pcap-tstamp(7)中给出了用于时间戳类型的名称 ;并非所有列出的类型对于任何给定接口都必须有效。
-J
–list-time-stamp-types
列出接口和出口支持的时间戳类型。如果无法为接口设置时间戳类型,则不会列出任何时间戳类型。
–time-stamp-precision = tstamp_precision
捕获时,将捕获的时间戳记精度设置为 tstamp_precision。请注意,高精度时间戳(纳秒)的可用性及其实际准确性取决于平台和硬件。另请注意,将以纳秒精度进行的捕获写入保存文件时,时间戳以纳秒分辨率写入,并且文件以不同的幻数写入,以表示时间戳以秒和纳秒为单位;并非所有读取pcap保存文件的程序都能够读取这些捕获。读取保存文件时,将时间戳转换为timestamp_precision指定的精度,并以该分辨率显示它们。如果指定的精度小于文件中时间戳的精度,则转换将失去精度。为支持的值timestamp_precision是微为微秒分辨率和纳米为十亿分之一秒分辨率。默认值为微秒分辨率。
–micro
–nano
速记为–time时间戳精度=微或 --time戳精度=纳米,相应地调节时间戳精度。从保存文件读取数据包时,如果以纳秒精度创建保存文件,则使用 --micro会截断时间戳。与此相反,具有微秒精度创建的SAVEFILE将具有当后添加的时间标记的零 --nano被使用。
-K
–dont-verify-checksums
不要尝试验证IP,TCP或UDP校验和。这对于在硬件中执行部分或全部校验和计算的接口很有用;否则,所有传出的TCP校验和将被标记为错误。
-l
使标准输出行缓冲。如果要在捕获数据时查看数据,则很有用。例如,
tcpdump -l | tee dat
或者
tcpdump -l > dat & tail -f dat
请注意,在Windows上,行缓冲表示未缓冲,因此如果 指定了-l,WinDump将分别写入每个字符 。
-U 的行为 与-l相似 ,但是它将导致输出被数据包缓冲,因此输出将在每个数据包的末尾而不是在每一行的末尾写入stdout; 这在包括Windows在内的所有平台上都有缓冲。
-L
–list-data-link-types
列出指定模式下接口的已知数据链路类型,然后退出。已知数据链路类型的列表可能取决于指定的模式。例如,在某些平台上,Wi-Fi接口在不处于监视模式时可能支持一组数据链路类型(例如,它可能仅支持伪造的以太网标头,或者可能支持802.11标头,但不支持带有无线电信息的802.11标头。 )和处于监视模式时的另一组数据链路类型(例如,仅在监视模式下,它可能支持802.11标头或带有无线电信息的802.11标头)。
-m module
从文件模块加载SMI MIB模块定义。可以多次使用此选项,以将多个MIB模块加载到tcpdump中。
-M secret
如果使用TCP-MD5选项(RFC 2385),可以使用secret作为共享密钥来验证在TCP段中找到的摘要。
-n
不要将地址(即主机地址,端口号等)转换为名称。
-N
不要打印主机名的域名限定。例如,如果提供此标志,则tcpdump将打印nic''而不是
nic.ddn.mil’’。
-#
–number
在该行的开头打印一个可选的数据包编号。
-O
–no-optimize
不要运行数据包匹配代码优化器。仅当您怀疑优化器中存在错误时,此功能才有用。
-p
–no-promiscuous-mode
不要将接口置于混杂模式。请注意,由于某些其他原因,该接口可能处于混杂模式。因此,“-p”不能用作“ ether host {local-hw-addr}或ether广播”的缩写。
–print
即使将原始数据包保存到带有-w 标志的文件中,也将打印已解析的数据包输出 。
-Q direction
–direction = direction
选择发送/接收方向上的哪些数据包应该被捕获。可能的值为“ in”,“ out”和“ inout”。并非在所有平台上都可用。
-q
快速输出。打印较少的协议信息,因此输出行更短。
-r file
从文件(使用-w 选项或其他写入pcap或pcapng文件的工具创建的 文件)中读取数据包。如果file为-,则使用标准输入。
-S
–absolute-tcp-sequence-numbers
打印绝对而不是相对的TCP序列号。
-s snaplen
–snapshot-length=snaplen
SNARF snaplen有字节的数据从每个分组而不是262144个字节的缺省值。由于快照有限而被截断的数据包在输出中显示为“ [| proto ]’’,其中proto 是发生截断的协议级别的名称。
请注意,拍摄更大的快照既增加了处理数据包的时间,又有效地减少了数据包缓冲的时间。这可能会导致数据包丢失。还请注意,拍摄较小的快照将丢弃传输层以上协议中的数据,这会丢失可能很重要的信息。例如,NFS和AFS请求和答复非常大,如果选择了太短的快照长度,则许多细节将不可用。
如果需要将快照大小减小到默认值以下,则应将snaplen限制为能够捕获所需协议信息的最小数量。将snaplen设置 为0会将其设置为默认值262144,以便与最新的旧版本向后兼容tcpdump的版本 。
-T type
强制将“ 表达式 ” 选择的数据包解释为指定的类型。当前已知的类型是 aodv(临时按需距离矢量协议), carp(公共地址冗余协议), cnfp(Cisco NetFlow协议), lmp(链接管理协议), pgm(实用通用组播), pgm_zmtp1(ZMTP /在PGM / EPGM中包含1.0), resp(REdis序列化协议), radius(RADIUS), rpc(远程过程调用), rtp(实时应用协议), rtcp(实时应用控制协议), snmp(简单网络管理协议), tftp(临时文件传输协议), vat(可视音频工具), wb(分布式白板), zmtp1(ZeroMQ消息传输协议1.0)和 vxlan(虚拟可扩展局域网)。
请注意,上述pgm类型仅影响UDP解释,无论如何,始终将本地PGM识别为IP协议113。UDP封装的PGM通常称为“ EPGM”或“ PGM / UDP”。
请注意,上面的pgm_zmtp1类型会同时影响本机PGM和UDP的解释。在本地PGM解码期间,ODATA / RDATA数据包的应用程序数据将被解码为具有ZMTP / 1.0帧的ZeroMQ数据报。在UDP解码期间,除此以外,任何UDP数据包都将视为封装的PGM数据包。
-t
不要在每个转储行上打印时间戳。
-tt
在每个转储行上打印时间戳(以自1970年1月1日以来的秒数,UTC)和自该时间以来的秒数。
-ttt
在每个转储行的当前行和上一行之间 打印增量(微秒或纳秒分辨率,具体取决于 --time-stamp-precision选项)。默认值为微秒分辨率。
-tttt
在每个转储行上打印时间戳,以小时,分钟,秒和自午夜以来的秒数为单位,并在日期前加上日期。
-ttttt
在每个转储行的当前行和第一行之间 打印增量(微秒或纳秒分辨率,具体取决于 --time-stamp-precision选项)。默认值为微秒分辨率。
-u
打印未解码的NFS句柄。
-U
–packet-buffered
如果 未指定-w选项,或者如果已指定但 也指定了 --print标志,则使打印的数据包输出为数据包缓冲; 即,当打印每个数据包内容的描述时,它将被写入标准输出,而不是在不写入终端时,仅在输出缓冲区已满时才写入。如果 指定了 -w选项,则将保存的原始数据包输出设置为数据包缓冲; 也就是说,保存每个数据包时,会将其写入输出文件,而不是仅在输出缓冲区已满时才写入。该 -U 如果标志将不被支持 的tcpdump 与旧版本的内置 的libpcap 是缺乏 pcap_dump_flush(3PCAP) 功能。
-v
解析和打印时,产生(稍微更多)详细输出。例如,打印IP数据包中的生存时间,标识,总长度和选项。还启用其他数据包完整性检查,例如验证IP和ICMP标头校验和。
当使用-w 选项写入文件时 ,每秒报告一次捕获的数据包数量。
-vv
更详细的输出。例如,从NFS答复数据包打印其他字段,并对SMB数据包进行完全解码。
-vvv
更详细的输出。例如,telnet SB … SE选项完整打印。使用 -X Telnet选项时,也以十六进制打印。
-V file
从file中读取文件名列表。如果文件为-,则使用标准输入。
-w file
将原始数据包写入文件,而不是解析并打印出来。以后可以使用-r选项打印它们。如果文件为``-’’,则使用标准输出。
如果将该输出写入文件或管道,则将对其进行缓冲,因此从文件或管道读取的程序在接收到数据包后的任意时间内可能看不到它们。使用 -U 标志使数据包在收到后立即被写入。
MIME类型application / vnd.tcpdump.pcap已经向IANA注册了pcap文件。文件扩展名.pcap 似乎与.cap和 .dmp一起最常用。Tcpdump本身在读取捕获文件时不会检查扩展名,在写入捕获文件时也不会添加扩展名(它在文件头中使用幻数)。但是,如果存在扩展名,则许多操作系统和应用程序都将使用该扩展名,建议添加一个扩展名(例如.pcap)。
有关文件格式的说明,请参见 pcap-savefile(5)。
-W
与-C 选项一起使用 ,这会将创建的文件数限制为指定的数量,并从头开始覆盖文件,从而创建“旋转”缓冲区。另外,它将使用足够的前导0命名文件,以支持最大数量的文件,从而使它们能够正确排序。
与-G 选项一起使用 ,这将限制所创建的旋转转储文件的数量,达到限制时以状态0退出。
如果与-C 和 -G一起使用 , 则 -W 选项当前将被忽略,并且仅影响文件名。
-X
解析和打印时,除了打印每个数据包的标题外,还以十六进制打印每个数据包的数据(减去其链接级别的标题)。整个数据包或快照 字节中较小的一个 将被打印。请注意,这是整个链路层数据包,因此,对于填充(例如以太网)的链路层,当更高层的数据包短于所需填充时,也会打印填充字节。
-xx
解析和打印时,除了打印每个数据包的 标头外,还以十六进制打印每个数据包的数据, 包括其链接级别标头。
-X
解析和打印时,除了打印每个数据包的标题外,还以十六进制和ASCII打印每个数据包的数据(减去其链接级别的标题)。这对于分析新协议非常方便。
-XX
解析和打印时,除了打印每个数据包的 标头外,还以十六进制和ASCII码打印每个数据包的数据, 包括其链接级别标头。
-y datalinktype
–linktype = 数据链接类型
设置将数据包捕获到datalinktype时要使用的数据链路类型。
-z postrotate命令
与-C 或 -G 选项一起使用 ,这将使 tcpdump 运行“ postrotate-command file ”,其中 file 是每次旋转后关闭的保存文件。例如,指定 -z gzip 或 -z bzip2 将使用gzip或bzip2压缩每个保存文件。
请注意,tcpdump将使用最低优先级与捕获并行运行命令,以免干扰捕获过程。
并且,如果您想使用本身带有标志或其他参数的命令,则始终可以编写一个以脚本文件名作为唯一参数的shell脚本,进行标志和参数的排列并执行所需的命令。
-Z user
–relinquish-privileges = user
如果 tcpdump 以root身份运行,请在打开捕获设备或输入保存文件之后,但在打开任何保存文件以供输出之前,将用户ID更改为 user ,将组ID更改为主要的user组 。
默认情况下,也可以在编译时启用此行为。
expression
选择要转储的数据包。如果未 给出任何表达式,则将丢弃网络上的所有数据包。否则,将仅转储表达式为“ true”的数据包。
有关表达式语法,请参见 pcap-filter(7)。
该表达式参数可被传递给和tcpdump作为单一壳牌参数,或作为多个壳牌参数,取其更方便。通常,如果表达式包含Shell元字符,例如用于转义协议名称的反斜杠,则将其作为单个带引号的参数传递比转义Shell元字符更容易。多个参数在解析之前用空格连接。