tcpdump的用法记录--命令介绍

命令格式

tcpdump [ -AdDeflLnNOpqRStuUvxX ] [ -c count ]
[ -C file_size ] [ -F file ]
[ -i interface ] [ -m module ] [ -M secret ]
[ -r file ] [ -s snaplen ] [ -T type ] [ -w file ]
[ -W filecount ]
[ -E spi@ipaddr algo:secret,... ]
[ -y datalinktype ] [ -Z user ]
[ expression ]

选项介绍

-A :  以ASCII码格式打印每个数据包(不包括链路层的数据头)。方便捕捉web页面。

-c : 将在收到count个包后退出

-C : 在将原始数据写入文件前,先判断是否文件又足够的空间file_size可以使用,如果没有则保存关闭当前文件,并新创建一个文件用于写入这些数据。文件名不变,只是在文件后面增加序号,从1开始

-d : 将匹配信息的模板代码以人们可读的形式输出到标准输出并停止

-dd : 将匹配信息的模板代码以c语言形式输出

-ddd : 将匹配信息的模板代码以10机制的形式输出

-D : 打印系统中可用的网络接口列表,并标出哪些可以使用tcpdump抓包

-e : 打印每条dump行的链路层头部

-E : 使用spi@ipaddr加密算法解密写给addr和包含安全参数索引值spi的IPsec ESP数据包。这种组合可以重复,使用逗号或换行符进行分隔

-f : 将外部的internet地址以数字形式打印出来

-F : 将从文件file中读取过滤表达式,同时忽略命令行输入的其它表达式

-i : 监听网络接口interface

-l : 使标准输出变为缓冲行形式

-L : 列出接口的已知数据链路类型并退出

-m : 加载文件模块module定义的SMI MBI模块

-M : 使用secret作为共享密钥验证tcp中的摘要信息

-n : 不将host的地址转换为主机名

-nn : 不转换协议和端口号

-N : 不打印主机名中的domain名。例:如果开启的话,则只会打印'nic'而不会打印'nic.ddn.mil'

-O : 不用醒信息匹配优化程序。这主要是为了确认是否优化程序存在bug

-p : 禁止把接口设置为promiscuous模式。注意,接口可能由于其它原因被置为promiscuous模式。因此,-p模式下不能被缩写为ether host {local-hw-addr} or ether broadcast

-q : 快速输出。打印较少的协议信息,所以输出的行较短

-R : 假定ESP/AH包是基于旧的规范。

-r : 从文件file中读取数据包(是通过-w选项创建的)

-S : 打印绝对的TCP序号而非相对的序号

-s : 截取每个数据包snaplen字节的数据而非默认的68个字节(如果是SunOS的NIT,最小值是96)。68个字节适用于IP、ICMP、TCP和UDP,但是有可能会截断名字服务器和NFS数据包。

-T : 把通过"expression"挑选出来的报文解释成指定的 type。目前已知的类型有: aodv(按需距离矢量路由协议 Adhoc On-demand Distance Vector protocol), cnfp (Cisco网络流协议 Cisco NetFlow protocol),rpc (远程过程调用 Remote Procedure Call), rtp (实时应用协议 Real-Time Applications protocol), rtcp (实时应用控制协议 Real-Time Applications control protocol),vat (可视音频工具 Visual Audio Tool)和 wb (分布式白板 distributed White Board)。

-t : 不打印每行的时间戳

-tt : 每行打印非规范化的时间戳

-ttt : 打印每行与前一行的时间间隔(毫秒为单位)

-tttt : 每行打印date命令默认格式的时间戳

-u : 打印未解码的NFS句柄

-U : 使得当tcpdump在使用-w 选项时,其文件写入与包的保存同步。(例:即, 当每个数据包被保存时, 它将及时被写入文件中,而不是等文件的输出缓冲已满时才真正写入此文件)

-v : 当分析和打印时,产生详细的输出。例如ttl、id、总长度和ip包的选项。这也会打开一些附加的包完整性检测,比如对IP或ICMP包头部的校验和

-vv : 比-v产生更详尽的输出。例如NFS回应包中的附加域会被打印,SMB数据也会被完全解码

-vvv : 比-vv产生更详尽的输出。例如telnet中的SB、SE选项会被打印,图形选项会被打印成对应的十六进制

-w : 向file文件中写入原始数据而不解析和打印它们。它们可以通过-r选项被打印出来。如果file对应为'-'则指标准输出

-W : 与选项-C配合使用,将限制可打开的文件数目filecount,并且当文件数量超过这里的设置时,循环替代之前的文件。另外,该选项会使得每个文件名的开头会出现足够多并用来占位的0,这可以方便这些文件被正确的排序

-x : 以十六进制打印每个数据包(不包括链路层的数据头)。总共打印的数据大小不会超过整个数据包的大小与snaplen 中的最小值。需要注意的是,如果高层协议数据没有snaplen 这么长,则会将链路层的数据填充进来

-xx : 以十六进制打印每个数据包(包括链路层的数据头)

-X : 以十六进制和ASCII码打印每个数据包(不包括链路层的数据头)。这会便于分析新协议

-XX :  以十六进制和ASCII码打印每个数据包(包括链路层的数据头)

-y : 设置tcpdump只捕获数据链路层协议类型是datalinktype的数据包

-z : 使tcpdump 放弃自己的超级权限(如果以root用户启动tcpdump, tcpdump将会有超级用户权限), 并把当前tcpdump的用户ID设置为user, 组ID设置为user首要所属组的ID

选项字段说明:

expression 条件表达式

     通过表达式选择要捕获的数据包。如果不指定条件表达式,则网络上所有数据包都会被捕获,否则,只有满足条件表达式的数据才会被捕获。

  表达式由一个或多个简单表达式组成,简单表达式通常由一个或多个修饰符后跟一个名字或数字表示的id组成。

  有三种不同的修饰符:type,dir和proto:

  type  修饰符指定id所代表的对象类型,可能的类型为host(主机)、net(网络)、port(端口)和portrange(端口范围)。如,'host foo'-主机名为foo,'net 128.3'-网络为128.3,'port 20'-端口为20,'portrange 6000-6008'-端口范围6000~6008。如果没指定type修饰符,则默认为host。

  dir   修饰符描述id所对应的传输方向,即‘发往id’或/与‘从id接收’的。可选取的方向为src、dst、src or dst和src and dst。如,'src foo'-源主机为foo,'dst net 128.3'-目的网络为128.3,'src or dst port ftp-data'-源或目的端口为ftp-data,如果没有指定dir修饰符,则默认为src or dst。对于链路层的协议,比如SLIP,以及linux下指定'any' 设备, 并指定'cooked' 抓取类型, 或其他设备类型,可以用'inbound' 和 'outbount' 修饰符来指定想要的传输方向。

  proto  修饰符描述id所述的协议,可选的协议有:ether, fddi, tr, wlan, ip, ip6, arp, rarp, decnet, tcp and udp。如,‘ether src foo’-源为以太网地址foo, ‘arp net 128.3’-网络为128.3的arp数据, ‘tcp port 21’-端口为21的tcp数据, ‘udp portrange 7000-7009’-端口范围为7000~7009的udp数据。如果没有指定协议修饰符,则默认为所有协议。如,'src foo' 含义是 '(ip or arp or rarp) src foo'-源为foo的ip、arp、rarp协议包 ,'net bar'意味是'(ip or arp or rarp) net bar'-网络bar上的ip、arp、rarp协议包,'port 53'意味是'(tcp or udp) port53'-端口为53的tcp、udp协议包。

  ['fddi'协议实际是ether的别名,解析器将其视为指定网络接口上的数据链路层,并且经常包含类似以太网的数据包类型,所以你能用类似以太网的字段的FDDI字段来过滤数据,FDDI头部也包含了其他字段,但是在过滤表达式中不能显示的命名这些字段。

  同样,'tr'和'wlan'也是ehter的别名,在前面的介绍FDDI头部的段落中的声明也适用于令牌环和802.11无线局域网协议头部。对于802.11协议头,DA字段为目的地址,SA字段为源地址;BSSID,RA和TA字段没有被检测。]

   除了上面所说的基本元素,还有其它的一些不遵循这种模式的基本元素:gateway、broadcast、less、greater和算数表达式,所有的这些基本元素将在厦门介绍。

  更复杂的过滤表达式使用与、或和非将基础元素拼接起来。如,'host foo and not port ftp and not port ftp-data'-主机名为foo且端口不为ftp和ftp-data的数据。为了方便,同样的修饰符可以被生了,如'tcp dst port ftp or ftp-data or domain’与以下表达式含义相同'tcp dst port ftp or tcp dst port ftp-data or tcp dst port domain'。

可用的基础元素有:

  dst host host

  如果IPv4/6数据包的目的地址字段为host,则为真

  srv host host

  如果IPv4/6数据包的源地址字段为host,则为真

  host host

  如果IPv4/6数据包的源或目的地址字段为host,则为真

  ip host host

  也可以表达为:  ether proto \ip and host host

  如果host拥有多个IP地址,那么任何一个地址都会用于匹配

  ether dst ehost

  如果以太网的目的地址为ehost,则为真

  ether src ehost

  如果以太网的源地址为ehost,则为真

  ether host ehost

  如果以太网的目的或源地址为ehost,则为真

  gateway host

  如果数据包的网关地址为host,则为真。注意,host为以太网的源或目的地址,而非是源IP或目的IP。host必须是一个名字,并且必须能在主机名到IP地址映射机制和主机名到以太网地址映射机制中找到。(前一映射关系可通过/etc/hosts文件, DNS 或 NIS得到, 而后一映射关系可通过/etc/ethers 文件得到)(一种意义相同的表达式为:ether host ehost 而不是host host,并且ehost/host可以是名字或者数字)

  dst net net

  如果数据包的IPv4/6目的地址的网络号为net,则为真。Net可能是/etc/networks中的一个名字或者是一个网络号

  src net net

  如果数据包的IPv4/6源地址的网络号为net,则为真。

  net net

  如果数据包的IPv4/6目的或源地址的网络号为net,则为真。

  net net mask netmask

  如果IPv4地址的掩码与指定的netmask想匹配,则为真,这里的地址可以是源地址或者是目的地址。该选项对IPv6地址无效

  net net/len

  如果IPv4/6地址的掩码与指定的掩码长度想匹配,则为真,这里的地址可以是源地址或者目的地址

  dst port port

  如果数据包是ip/tcp,ip/udp,ip6/tcp或者ip6/udp并且目的端口为port,则为真。这里的端口可以是一个数字或者是一个在/etc/services中定义的名字。如果使用的是名字,则该名字对应的端口号和相应使用的协议都会被检查;如果是一个数字,则只检查相应的端口号(如,dst port 513将会让tcpdump抓取tcp协议的login服务和udp协议的who服务数据包,而dst domain则会让tcpdump抓取tcp协议的domain服务和udp协议的domain服务数据包)

  src port port

  如果数据包的源端口为port,则为真

  port port

  如果数据包的目的或源端口为port,则为真

  dst portrange port1-port2

  如果数据包是ip/tcp,ip/udp,ip6/tcp或者ip6/udp并且目的端口在port1-port2范围内,则为真。tcpdump 对port1 和port2 解析与port中的port的解析一致

  src portrange port1-port2

  如果数据包的源端口在port1到port2范围内,则为真

  portrange port1-port2

  如果数据包的源或者目的端口在port1到port2范围内,则为真

  以上任何port或者portrange表达式都可以在之前加上关键字:tcp或者udp,如tcp src port port,只匹配tcp协议下的目的端口为port的数据包

  less length

  如果数据包的长度小于或等于length,则为真。相同意义的表达式:len <= length

  greater length

  如果数据包的长度大于或等于length,则为真。相同意义的表达式:len >= length

  ip proto protocol

  如果数据包为ipv4数据包并且其协议类型为protocol, 则为真。protocol可以是一个数字或者是下列名字中的一个:icmp,icmp6,igmp,igrp,pim,ah,esp,vrrp,udp或tcp。由于tcp,udp 以及icmp是tcpdump 的关键字,所以在这些协议名字之前必须要加上\用来转义(在C-shell中需要用\\来转义)。注意此基础元素不会抓取数据包中协议头链

  ip6 proto protocol

  如果数据包为ipv6数据并且其协议类型为protocol,则为真。注意此基础元素不会抓取数据包中协议头链。

  ip6 protochain protocol

  如果数据包为ipv6数据包并且其协议链中包含类型为protocol协议头, 则为真。

   ip6 protochain 6

  将匹配其协议头链中拥有TCP 协议头的IPv6数据包。此数据包的IPv6头和TCP头之间可能还会包含验证头,路由头,或者逐跳寻径选项头。由此所触发的相应BPF(Berkeley Packets Filter, 可理解为, 在数据链路层提供数据包过滤的一种机制)代码比较繁琐,并且BPF优化代码也未能照顾到此部分, 从而此选项所触发的包匹配可能会比较慢。

  ip protochain protocol

  如果数据包为ipv4数据包并且其协议链中包含类型为protocol协议头, 则为真。

  ether broadcast

  如果数据包为以太网广播包,则为真。ether为可选字段。

  ip broadcast

  如果数据包为IPv4的广播包,则为真。这会使tcpdump检查全0或和全1的广播约定,并且查看网络接口的子网络掩码,网络接口为正在抓包的网络接口。

  如果网络接口的子网络掩码不可用,则有可能是这个网络接口没有掩码或者正在linux上任意的网络接口进行抓取,抓取在不止一个的网络接口上进行,这时无法正常工作。

  ether multicast

  如果数据包为一个以太网的组播包,则为真。ether为可选字段。这个可以简单记为'ether[0] & 1 != 0'。

  ip multicast

  如果数据包为一个IPv4的组播包,则为真。

  ip6 multicast

  如果数据包为一个IPv6的组播包,则为真。

  ether proto protocol

  如果数据包为一个以太网协议包,则为真。protocol可以是数字或下面名字的一种:ip、ip6、arp、rarp、atalk、aarp、decnet、lat、mopdl、moprc、iso、stp、ipx或者netbeui。注意标识符也是关键字,从而必须通过'\'来进行转义。

    [在FDDI(光线分布式数据网络接口)中(如:'fddi protocol arp'),令牌环网(如:'tr protocol arp'),以及IEEE 802.11 无线局域网(如:'wlan protocol arp')中,大多数协议中,protocol标示符来自802.2逻辑链路控制层的头部,其包含在FDDI、令牌环或802.1头中。

  当以FDDI、令牌环和802.1这些网络上的相应的协议标识为过滤条件时,tcpdump只是检查LLC头部中以0x000000为组成单元标识符(OUI, 0x000000标识一个内部以太网)的一段'SNAP格式结构'中的protocol ID 域,而不会管包中是否有一段OUI为0x000000的'SNAP格式结构'。

  有以下例外:

    iso  tcpdump会检查LLC头部中的DSAP字段(Destination service Access Point,目标服务接入点)和SSAP字段(Source Service  Access  Point,源服务接入点)

    stp 和 netbeui  tcpdump会检查LLC 头部中的目标服务接入点(Destination service Access Point)

    atalk  tcpdump会检查LLC 头部中以0x080007 为OUI标识的'SNAP格式结构',并会检查AppleTalk etype域。

    此外, 在以太网中, 对于ether proto protocol 选项,tcpdump 会为 protocol 所指定的协议检查以太网类型域(the Ethernet type field),以下协议例外:

    iso, stp, and netbeui  tcpdump 会检查802.3 物理帧以及LLC 头(这两种检查与FDDI, TR, 802.11网络中的相应检查一致)

    atalk  tcpdump 会检查以太网物理帧中的AppleTalk etype 字段,同时也会检查FDDI,令牌环和802.11协议数据包中LLC头部中的'SNAP格式结构'

        aarp  tcpdump 会检查AppleTalk ARP etype 域,此域或存在于以太网物理帧中, 或存在于LLC(由802.2 所定义)的'SNAP格式结构'中
    ipx  tcpdump 会检查物理以太帧中的IPX etype域,LLC头中的IPX DSAP域,无LLC头并对IPX进行了封装的802.3帧以及LLC 头部'SNAP格式结构'中的IPX etype 域

  decnet src host 

  如果数据包中DECNET源地址为host,则为真

  decnet dst host 

 

  如果数据包中DECNET目的地址为host,则为真

  decnet host host

  如果数据包中的DUCNET目的或源地址为host,则为真

  ifname interface

  如果数据包被指定的网络接口interface接入,则为真

  on interface

  与ifname意义相同

  rnr num

  如果数据包匹配指定PF字段值num,则为真

  rulenum num

  与rnr num意义相同

  reason code

  如果数据包匹配指定的PF代码code,则为真

  rset name

  如果数据包匹配指定的PF规则集名name,则为真

  ruleset name

  与rset name意义相同

  srnr num

  如果数据包匹配指定的PF规则数num的特定规则,则为真

  subrulenum num

  与srnr num意义相同

  action act

  如果数据包匹配时PF有指定的动作act,则为真

  ip, ip6, arp, rarp, atalk, aarp, decnet, iso, stp, ipx, netbeui

  简写为:ether proto p  其中p为上面协议中的一个

  lat, moprc, mopdl

  简写为:ehter proto p  其中p为上面协议中的一个。注意tcpdump目前还无法解析这些协议

  vlan [vlan_id]

  如果数据包为一个802.1Q局域网的包,则为真。如果指定[valn_id],则只有数据包为指定vlan_id的包时为真。注意对于VLAN数据包,在表达式中遇到的第一个vlan关键字会改变表达式中接下来关键字所对应数据包中数据的开始位置(即解码偏移)。在VLAN网络过滤数据包时,vlan [vlan_id]表达式可以被多次使用,关键字vlan每出现一次都会增加4字节偏移。
  例如:
  vlan 100 && vlan 200  过滤封装在vlan100中的vlan200的数据包
  vlan 100 && vlan 300 && ip  过滤封装在vlan300中的ipv4的数据包,而该包又被封装到vlan100的数据包中

  mpls [label_num]

  如果数据包为MPLS数据包,则为真。如果指定[label_num],则只有数据包为指定label_num的包时为真。注意对于MPLS数据包,在表达式中遇到的第一个mpls关键字会改变表达式中接下来关键字所对应数据包中数据的开始位置(即解码偏移)。在MPLS网络过滤数据包时,mpls [label_num]表达式可以被多次使用,关键字mpls每出现一次都会增加4字节的偏移。
  例如:mpls 10000 & mpls 1024  过滤外层mpls标签为10000而内层mpls标签为1024的数据包
     mpls && mpls 1024 && host 192.9.200.1  过滤源或目的为192.9.200.1的mpls数据包,且包的内层标签为1024

  pppoed

  如果数据包为PPP-over-Ethernet的服务器探寻数据包,则为真

  pppoes

  如果数据包为PPP-over-Ethernet的会话数据包,则为真。注意对于PPP-over-Ethernet会话数据包,在表达式中遇到的第一个pppoes关键字会改变表达式中接下来关键字所对应数据包中数据的开始位置(即解码偏移)。
  例如:pppoes && ip  过滤封装在PPPoE数据包中的ipv4数据包

  tcp, udp, icmp

  简写为:ip proto p or ip6 proto p  其中p是以上协议中的一种

  iso proto protocol

  如果数据包的协议类型为osi协议栈中protocol协议,则为真。protocol可以为一个数字或者是下面名字的一种:clnp,esis或者isis

  clnp, esis, isis

  简写为:ios proto p  其中p为以上协议中的一种

  l1, l2, iih, lsp, snp, csnp, psnp

  是IS-IS PDU类型的缩写。

  vpi n

  如果数据包为一个Solaris系统SunATM设备的ATM包,并且虚拟路径id为n,则为真

  vci n

  如果数据包为一个Solaris系统SunATM设备的ATM包,并且虚拟通道id为n,则为真

  lane

  如果数据包为一个Solaris系统SunATM设备的ATM包,并且是一个ATM LANE包,则为真。注意:如果是模拟以太网的LANE数据包或者LANE逻辑单元控制包,表达式中第一个lane关键字会改变表达式中随后条件的测试. 如果没有指定lane关键字,条件测试将按照数据包中内含LLC(逻辑链路层)的ATM包来进行。

  llc

  如果数据包为一个Solaris系统SunATM设备的ATM包,并且是一个LLC-encapsulated包,则为真

  oamf4s

  如果数据包为一个Solaris系统SunATM设备的ATM包,并且是Segment OAM F4 信元(VPI=0 并且 VCI=3),则为真

  oamf4e

  如果数据包为一个Solaris系统SunATM设备的ATM包,并且是end-to-end OAM F4信元(VPI=0 并且 VCI=4),则为真

  oamf4

  如果数据包为一个Solaris系统SunATM设备的ATM包,并且是Segment 或 end-to-end OAM F4信元(VPI=0 并且 (VCI =3 或 VCI=4)),则为真

  oam

  如果数据包为一个Solaris系统SunATM设备的ATM包,并且是Segment 或 end-to-end OAM F4信元(VPI=0 并且 (VCI =3 或 VCI=4)),则为真

  metac

  如果数据包为一个Solaris系统SunATM设备的ATM包,并且是元信令线路(VPI=0 并且 ACI=1),则为真

  bcc

  如果数据包为一个Solaris系统SunATM设备的ATM包,并且是广播信令线路(VPI=0 并且 ACI=2),则为真

  sc

  如果数据包为一个Solaris系统SunATM设备的ATM包,并且是信令线路(VPI=0 并且 ACI=5),则为真

  ilmic

  如果数据包为一个Solaris系统SunATM设备的ATM包,并且是ILMI线路(VPI=0 并且 ACI=16),则为真

  connectmsg

  如果数据包为一个Solaris系统SunATM设备的ATM包,并且是信令线路和Q.2931的Setup, Calling Proceeding、Connect、Connect Ack、Release或者Release Done消息,则为真

  metaconnect

  如果数据包为一个Solaris系统SunATM设备的ATM包,并且是元信令线路和Q.2931的Setup, Calling Proceeding、Connect、Connect Ack、Release或者Release Done消息,则为真

  expr relop expr

  如果relop两侧的表达式满足指定的关系relop,则为真。
  relop可以是以下关系操作符之一:>,<,<=,>=,=,!=。
  expr是一个算数表达式,词表达式中可以使用整型常量,二进制操作符[
+, -, *, /, &,|, <<, >>],长度操作符以及对特定数据包中数据的引用操作符。注意,所有比较操作都默认被操作数都是无符号的,如,0x80000000和0xffffffff都是大于0的。如果要引用数据包中的数据,则可以这样表达:
  proto [expr : size]
  proto可以是以下类型之一:ether,fddi,tr,wlan,ppp,slip,link,ip,arp,rarp,tcp,udp,icmp,ip6或radio,指明该引用操作多对应的协议。(ether, fddi, wlan, tr, ppp, slip and link 对应于数据链路层, radio 对应于802.11某些数据包中的附带的"radio"头)。注意,tcp,udp和其他上层协议只能应用于IPv4,而不能应用于IPv6(将来可能会支持)。

  对于指定协议的所需数据,其在包数据中的偏移字节由expr 来指定。

  size是可选项,用于指明所引用数据的长度,其长度可以是1,2或4个字节,如果不指定size,默认为1个字节。长度操作符的关键字为len,代表整个数据包的长度,如'ether[0] & 1 != 0'将会使tcpdump抓取所有组播数据包,'ip[0] & 0xf != 5'表示抓取IPv4的数据包,'ip[6:2] & 0x1fff = 0'表示抓取没被分片的IPv4的数据包或者分片编号为0的被分片的IPv4数据包。这种数据检查方式也适用于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的特殊字符, 所以在shell脚本或终端中使用时必须对括号进行转义, 即'(' 与')'需要分别表达成'\(' 与 '\)').
            有效的操作符有:
            非操作 ('!' 或 'not')
            与操作('&&' 或 'and')
            或操作('||' 或 'or')

    非操作的优先级最高,与操作和或操作优先级相同,并且而这的运算顺序是从左到右的。注意,表达'与操作'时,需要显式写出'and'操作符,而不只是把前后表达元并列放置。如果一个标示符前没有关键字,则在解析表达式时会使用最近用过的关键字,如:
    not host vs and ace
    是以下表达式的简写:
    not host vs and host ace
    而不是:not (host vs or ace)
    表示数据包的源或目的不是vs的或源或目的为ace的都为真。

  整个条件表达式可以被当作一个单独的字符串参数也可以被当作以空格分割的多个参数传入tcpdump,后者更方便些。通常,如果表达式中包含元字符,最好还是使用单独字符串的方式传入。这时,整个表达式需要被单引号括起来。多参数的传入方式中,所有参数最终还是被空格串联在一起,作为一个字符串被解析。

 

 

posted @ 2013-01-07 18:28  Geek_Ma  阅读(1466)  评论(0编辑  收藏  举报