tcpdump的语法

  • Post author:
  • Post category:其他


tcpdump  转储网络上的流量

语法

tcpdump     [-AbdDefhHIJKlLnNOpqRStuUvxX ]

[ -B buffer_size ]

[ -c count ]

[ -C file_size ]

[ -G rotate_seconds ]

[ -F file ]

[ -i interface ]

[ -j tstamp_type ]

[ -m module ]

[ -M secret ]

[ -P in | out | inout ]

[ -r file ]

[ -V file ]

[ -s snaplen ]

[ -T type ]

[ -w file ]

[ -W filecount ]

[ -E spi@ipaddr algo:secret,… ]

[ -y datalinktype ]

[ -z postrotate-command ]

[ -Z user ]

[ expression ]

描述

tcpdump打印出网络接口上面匹配布尔表达式expression的包的内容的描述信息。提供 -w参数,

tcpdump会保存包数据到一个文件中,以做以后的分析之用;如果使用了-r参数,tcpdump不会从

网络接口读取数据包,而是从一个文件中读取,该文件是使用-w参数生成的数据包文件;使用-V

参数,tcpdump会读取一系列数据包文件。在所有的情况下,只有使表达式expression为true的

数据包才会被tcpdump处理。

如果没有使用了-c参数,tcpdump会持续捕获数据包直到被杀死或者被使用ctrl-c中断;如果使

用了-c参数,那么tcpdump会在捕获了count个数据包后或者被中断或者被杀死后退出。

当tcpdump完成了数据包的捕获之后,他会报告以下信息:

捕获的数据包的:这是tcpdump已经接收并且处理的数据包的数量

被过滤器接收的数据包的数量:该数据的意义依赖于你运行tcpdump的操作系统以及操作系统

被配置的方式。如果过滤器是在命令行上指定的话,它代表总的数据包的数量而不论数据包

是否匹配过滤表达式,即使数据包匹配了过滤表达式,也不管tcpdump是否已经读取并且

处理了这些数据包;在另外一些操作系统上,它只代表匹配了过滤表达式的数据包的数量,

而不管tcpdump是否处理了它们;在其它的一些操作系统上,它只代表匹配过滤表达式的并

且并tcpdump处理了的数据包的数量

被内核丢弃的数据包的数量:这是被丢弃的数据包的数量,主要是由于缓冲区空间太小,

从网络接口监听数据包可能需要你具有root权限;从一个保存的数据包文件中读取数据包不需要

root权限

选项

-A    以ASCII码打印出每一个数据包(去除链路层首部)。对于捕获web页面来说很方便。

-b    以ASDOT符号打印BGP包中的自制系统号码

-B    设置操作系统捕获缓冲区大小为 buffer_size KB

-c     捕获count个数据包后退出

-C

-d

-dd

-ddd

-D    打印出tcpdump可以监听的网络接口的列表。对于每一个接口,打印一个号码和接口名,接口名

和号码可以当做-i选项的参数用于指定捕获哪一个网络接口的数据包。

-e    在输出的每一行上打印出数据链路层的首部。

-E

-f

-F    使用file文件中的内容作为过滤表达式。命令行上的过滤表达式被忽略

-G

-h    打印出tcpdump和libpcap的版本号以及一条有用的信息,然后退出

-H    尝试探测802.11协议数据包头

-i    监听端口interface。如果未指定,则监听系统接口列表中接口号码最小的接口

-I    将网络接口置于监控模式

-j    设置捕获时候的时间戳类型为tstamp type

-J    列出接口支持的时间戳类型

-K    不要尝试去验证IP,TCP,UDP的校验和

-l    将输出缓冲

-L    列出接口支持的数据链路类型

-m

-M

-n    不要把地址转换成名字

-N    不要打印全限定域名主机名

-O    不要运行包匹配代码优化器。当你怀疑优化器有bug时很有用

-p    不要将接口置于混杂模式

-P    选择要捕获的数据包的接受/发送方向。有效值为 in,out,inout

-R

-r    从file文件读取数据包(该数据包是以-w参数生成的)

-S    打印绝对(不是相对)tcp报文段序号

-s

-T    将捕获的数据包强制解释为指定的类型

-t    不要在输出行上打印时间戳

-tt    在每一行上打印未格式化的时间戳

-ttt    打印当前行和上一行之间的时间增量

-tttt    在输出行上以默认格式打印时间戳

-ttttt    打印当前行和第一行之间的时间增量

-u

-U

-v        产生稍为详细的输出

-vv        产生更加详细的输出

-vvv    产生更更加详细的输出

-V    从file文件读出一个文件名的列表

-w    将数据包写入文件file

-W    和-C配合使用

-x    当解析和输出的时候,除了打印每一个包的包头,也以十六进制打印每一个包的数据(去掉

数据链路层的首部)。

-xx        当解析和输出的时候,除了打印每一个包的首部,也打印每一个包的数据,包括数据链路

层的首部,以十六进制打印。

-X    以十六进制和ASCII打印每个包的首部和数据,去除数据链路层的首部

-XX        同上,不过也打印数据链路层的首部

-y

-z

-Z    切换用户

expression

选择转储哪一个包。如果没有使用expression,网络上所有的包都被转储。否则,只有使

expression为true的包才会被转储。过滤表达式的语法在下面介绍。

过滤表达式

过滤表达式包含一个或者多个primotives(原语)。primitive通常包含一个id(名字或者数字),

id的前面是一个或者多个限定词。有三种类型的限定词:

type    type限定词说明了id指的是哪一种数据。可能的types有 host,net,port,和

portrange。例如,host foo,net 128.3,port 20,portrange 6000-8000.如果没有

type限定词,那么假定限定词是host。

dir        dir限定词指定了数据包相对于id的传输方向。可能的方向有src,dst,src or dst,

src and dst,ra,ta,addr1,addr2,addr3,addr4.例如:src foo,dst net 128.3

如果没有dir限定词,假定dir限定词是src or dst。限定词ra,ta,addr1,addr2,

addr3,addr4只对IEEE 802.11无线网有效。

proto    proto限定词限定匹配到某一个特别的协议。可能的协议有:ether,fddi,tr,wlan,

ip,ip6,arp,rarp,decnet,tcp,udp。例如:ether src foo,arp net 128.3

如果没有指定proto限定词,假定所有的协议都可以。

除了以上的以外,还有一些特殊的primitive关键字,这些关键字不符合以上模型:gateway,

broadcast,less,greater和算术表达式。

更复杂的过滤表达式可以使用关键字and,or和not去组合primitive。例如:

host foo and not port ftp-data。

允许的primitive有:

dst host (host)

如果数据包的目的ip是(host),(host)可以是一个地址或者名字。该表达式为true

src host  (host)

同上,不过是源ip地址

host (host)

如果数据包的源ip或者目的ip是host那么该表达式为true。

以上三个host表达式都可以在前面加上以下关键字:ip,arp,rarp,或者ip6

ether dst (ehost)

如果数据帧的以太网卡目的地址为ehost,则该表达式为真,ehost或者是一个/etc/ethers

里面的名字或者是一个数字网卡地址。

ether src (ehost)

ether host (ehost)

如果捕获的数据帧的目的或源网卡地址是ehost,则该表达式为true。

gateway (host)

dst net (net)

如果数据包的ip地址的网络号是net,则表达式为true。

src net (net)

net (net)

net (net) mask (netmask)

net (net/len)

dst port (port)

如果数据包的目的端口号是port,为true。

src port (port)

port (port)

dst portrange (port1-port2)

src portrange (port1-port2)

portrange (port1-port2)

如果数据包的目的端口或者源端口的范围在port1到port2之间,那么该表达式为true

以上所有与port有关的表达式都可以在前面加上tcp或者udp。那样的话就只匹配tcp报文段

或者udp数据报。

less (length)

len <= (length)

如果数据帧的长度小于等于length,该表达式为真。

greater (length)

len >= (length)

ip proto (protocol)

如果数据帧是一个ip数据包,ip的协议字段的协议是protocol,该表达式为真。可能的

protocol是icmp,igmp,icmp6,igrp,pim,ah,esp,vrrp,udp,或者tcp。注意

协议tcp,udp,和icmp同样是关键字,因此必须在他们的前面加上反斜杠。在cshell中

应该加上两个反斜杠。







primitive可能使用一些运算符组合在一起:

括弧

取反(!或者not)

相与(&&或者and)

相或(||或者or)

取反优先级最高。与运算和或运算具有相同的优先级和自左至右的结合性。



版权声明:本文为yifuyou原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。