加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

linux下tcpdump抓包参数详解(下)

(2014-07-31 15:07:34)
标签:

股票

分类: w~linux


tcpdump条件表达式

  该表达式用于决定哪些数据包将被打印如果不给定条件表达式网络上所有被捕获的包都会被打印,否则只有满足条件表达式的数据包被打印.(nt: all packets, 可理解为所有被指定接口捕获的数据包).

  表达式由一个或多个'表达元'组成(nt: primitive, 表达元可理解为组成表达式的基本元素). 一个表达元通常由一个或多个修饰符(qualifiers)后跟一个名字或数字表示的id组成(nt: 'qualifiers id').有三种不同类型的修饰符:type, dir以及 proto.

type 修饰符指定id 所代表的对象类型id可以是名字也可以是数字可选的对象类型有host, net, port 以及portrange(nt: host 表明id表示主机net 表明id是网络port 表明id是端而portrange 表明id 是一个端口范围).  'host foo', 'net 128.3', 'port 20', 'portrange 6000-6008'(nt: 分别表示主机 foo,网络 128.3, 端口 20, 端口范围 6000-6008). 如果不指定type 修饰符id默认的修饰符为host.

dir 修饰符描述id 所对应的传输方向即发往id 还是从id 接收(nt: id 到底指什么需要看其前面的type 修饰符).可取的方向为src, dst, src  dst, src并且dst.(nt:分别表示id是传输源id是传输目的id是传输源或者传输目的id是传输源并且是传输目的). 例如'src foo','dst net 128.3', 'src or dst port ftp-data'.(nt: 分别表示符合条件的数据包中源主机是foo, 目的网络是128.3, 源或目的端口为 ftp-data).如果不指定dir修饰符id 默认的修饰符为src  dst.对于链路层的协议,比如SLIP(nt: Serial Line InternetProtocol, 串联线路网际网络协议), 以及linux下指定'any' 设备并指定'cooked'(nt rt: cooked 含义未知需补充抓取类型或其他设备类型,可以用'inbound'  'outbount' 修饰符来指定想要的传输方向.

proto 修饰符描述id 所属的协议可选的协议有ether, fddi, tr, wlan, ip, ip6, arp, rarp, decnet, tcp以及 upd.(nt rt: ether, fddi, tr, 具体含义未知需补充可理解为物理以太网传输协议光纤分布数据网传输协议,以及用于路由跟踪的协议 wlan, 无线局域网协议ip,ip6 即通常的TCP/IP协议栈中所使用的ipv4以及ipv6网络层协议;arp, rarp 即地址解析协议,反向地址解析协议decnet, Digital Equipment Corporation开发的最早用于PDP-11 机器互联的网络协议tcp and udp, 即通常TCP/IP协议栈中的两个传输层协议).

    例如`ether src foo', `arp net 128.3', `tcp port 21', `udp portrange 7000-7009'分别表示 '从以太网地址foo 来的数据包','发往或来自128.3网络的arp协议数据包', '发送或接收端口为21tcp协议数据包', '发送或接收端口范围为7000-7009udp协议数据包'.

    如果不指定proto 修饰符则默认为与相应type匹配的修饰符例如'src foo' 含义是 '(ip or arp or rarp) src foo' (nt: 来自主机fooip/arp/rarp协议数据包默认typehost),`net bar' 含义是`(ip  or  arp  or rarp) net bar'(nt: 来自或发往bar网络的ip/arp/rarp协议数据包),`port 53' 含义是 `(tcp or udp) port 53'(nt: 发送或接收端口为53tcp/udp协议数据包).(nt: 由于tcpdump 直接通过数据链路层的 BSD 数据包过滤器或 DLPI(datalink provider interface, 数据链层提供者接口)来直接获得网络数据包其可抓取的数据包可涵盖上层的各种协议包括arp, rarp, icmp(因特网控制报文协议),ip, ip6, tcp, udp, sctp(流控制传输协议).

    对于修饰符后跟id 的格式,可理解为type id 是对包最基本的过滤条件即对包相关的主机网络端口的限制;dir 表示对包的传送方向的限制proto表示对包相关的协议限制)

    'fddi'(nt: Fiber Distributed Data Interface) 实际上与'ether' 含义一样tcpdump 会把他们当作一种''指定网络接口上的数据链路层协议''. 如同ehter(以太网), FDDI 的头部通常也会有源目的以及包类型从而可以像ether网数据包一样对这些域进行过滤此外FDDI 头部还有其他的域但不能被放到表达式中用来过滤

    同样'tr'  'wlan' 也和 'ether' 含义一致上一段对fddi 的描述同样适用于tr(Token Ring) wlan(802.11 wireless LAN)的头部对于802.11 协议数据包的头部目的域称为DA, 源域称为 SA;而其中的 BSSID, RA, TA (nt rt: 具体含义需补充)不会被检测(nt: 不能被用于包过虑表达式中).

  除以上所描述的表达元('primitive') 还有其他形式的表达元并且与上述表达元格式不同比如gateway, broadcast, less, greater以及算术表达式(nt: 其中每一个都算一种新的表达元). 下面将会对这些表达元进行说明.

  表达元之间还可以通过关键字and, or 以及 not 进行连接从而可组成比较复杂的条件表达式比如,`host foo and not port ftp and not port ftp-data'(nt: 其过滤条件可理解为数据包的主机为foo,并且端口不是ftp(端口21) ftp-data(端口20, 常用端口和名字的对应可在linux 系统中的/etc/service 文件中找到)).

  为了表示方便同样的修饰符可以被省略'tcp dst port ftp or ftp-data or domain' 与以下的表达式含义相同'tcp dst port ftp or tcp dst port ftp-data or tcp dst port domain'.(nt: 其过滤条件可理解为,包的协议为tcp, 目的端口为ftp  ftp-data  domain(端口53) ).

  借助括号以及相应操作符,可把表达元组合在一起使用(由于括号是shell的特殊字符所以在shell脚本或终端中使用时必须对括号进行转义'(' ')'需要分别表达成'\('  '\)').

  有效的操作符有:

 否定操作 (`!'  `not')
 与操作(`&&'  `and')
 或操作(`||'  `or')

  否定操作符的优先级别最高与操作和或操作优先级别相同并且二者的结合顺序是从左到右要注意的是表达'与操作',

  需要显式写出'and'操作符而不只是把前后表达元并列放置(nt: 二者中间的'and' 操作符不可省略).

  如果一个标识符前没有关键字则表达式的解析过程中最近用过的关键字(往往也是从左往右距离标识符最近的关键字)将被使用.比如,
    not host vs and ace
  是以下表达的精简:
    not host vs and host ace
  而不是not (host vs or ace).(nt: 前两者表示所需数据包不是来自或发往host vs, 而是来自或发往ace.而后者表示数据包只要不是来自或发往vsac都符合要求)

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

 

附录:tcpdump的表达元

(nt: True 在以下的描述中含义为相应条件表达式中只含有以下所列的一个特定表达元此时表达式为真即条件得到满足)

dst host host
如果IPv4/v6 数据包的目的域是host, 则与此对应的条件表达式为真.host 可以是一个ip地址也可以是一个主机名.
src host host
如果IPv4/v6 数据包的源域是host, 则与此对应的条件表达式为真.
host 可以是一个ip地址也可以是一个主机名.
host host

如果IPv4/v6数据包的源或目的地址是 host, 则与此对应的条件表达式为真.以上的几个host 表达式之前可以添加以下关键字:ip, arp, rarp, 以及 ip6.比如:
ip host host
也可以表达为:
ether proto \ip and host host(nt: 这种表达方式在下面有说明其中ip之前需要有\来转义,因为ip tcpdump 来说已经是一个关键字了.)

如果host 是一个拥有多个IP 的主机那么任何一个地址都会用于包的匹配(nt: 即发向host 的数据包的目的地址可以是这几个IP中的任何一个host 接收的数据包的源地址也可以是这几个IP中的任何一个).

ether dst ehost
如果数据包(nt: tcpdump 可抓取的数据包包括ip 数据包tcp数据包)的以太网目标地址是ehost,则与此对应的条件表达式为真Ehost 可以是/etc/ethers 文件中的名字或一个数字地址(nt: 可通过 man ethers 看到对/etc/ethers 文件的描述样例中用的是数字地址)

ether src ehost
如果数据包的以太网源地址是ehost, 则与此对应的条件表达式为真.

ether host ehost
如果数据包的以太网源地址或目标地址是ehost, 则与此对应的条件表达式为真.

gateway host
如果数据包的网关地址是host, 则与此对应的条件表达式为真需要注意的是这里的网关地址是指以太网地址而不是IP 地址(nt rt: I.e., 例如可理解为'注意'.the Ethernet source or destination address, 以太网源和目标地址可理解为指代上句中的'网关地址).host 必须是名字而不是数字并且必须在机器的'主机名-ip地址'以及'主机名-以太地址'两大映射关系中 有其条目(前一映射关系可通过/etc/hosts文件DNS  NIS得到而后一映射关系可通过/etc/ethers 文件得到nt: /etc/ethers并不一定存在 可通过man ethers 看到其数据格式如何创建该文件未知,需补充).也就是说host 的含义是 ether host ehost 而不是 host host, 并且ehost必须是名字而不是数字.
目前该选项在支持IPv6地址格式的配置环境中不起作用(nt: configuration, 配置环境可理解为,通信双方的网络配置).

dst net net
如果数据包的目标地址(IPv4IPv6格式)的网络号字段为 net, 则与此对应的条件表达式为真.
net 可以是从网络数据库文件/etc/networks 中的名字也可以是一个数字形式的网络编号.

一个数字IPv4 网络编号将以点分四元组(比如192.168.1.0), 或点分三元组(比如192.168.1 ), 或点分二元组(比如172.16), 或单一单元组(比如10)来表达;

对应于这四种情况的网络掩码分别是:四元组:255.255.255.255(这也意味着对net 的匹配如同对主机地址(host)的匹配:地址的四个部分都用到了),三元组:255.255.255.0, 二元组255.255.0.0, 一元组:255.0.0.0.

对于IPv6 的地址格式网络编号必须全部写出来(8个部分必须全部写出来); 相应网络掩码为:
ff:ff:ff:ff:ff:ff:ff:ff, 所以IPv6 的网络匹配是真正的'host'方式的匹配(nt rt rc:地址的8个部分都会用到,是否不属于网络的字节填写0, 需接下来补充), 但同时需要一个网络掩码长度参数来具体指定前面多少字节为网络掩码(nt: 可通过下面的net net/len 来指定)

src net net
如果数据包的源地址(IPv4IPv6格式)的网络号字段为 net, 则与此对应的条件表达式为真.

net net
如果数据包的源或目的地址(IPv4IPv6格式)的网络号字段为 net, 则与此对应的条件表达式为真.

net net mask netmask
如果数据包的源或目的地址(IPv4IPv6格式)的网络掩码与netmask 匹配则与此对应的条件表达式为真.此选项之前还可以配合srcdst来匹配源网络地址或目标网络地址(nt: 比如 src net net mask 255.255.255.0).该选项对于ipv6 网络地址无效.

net net/len
如果数据包的源或目的地址(IPv4IPv6格式)的网络编号字段的比特数与len相同则与此对应的条件表达式为真.此选项之前还可以配合srcdst来匹配源网络地址或目标网络地址(nt rt tt: src net net/24, 表示需要匹配源地址的网络编号有24位的数据包).

dst port port
如果数据包(包括ip/tcp, ip/udp, ip6/tcp or ip6/udp协议)的目的端口为port, 则与此对应的条件表达式为真.port 可以是一个数字也可以是一个名字(相应名字可以在/etc/services 中找到该名字也可以通过man tcp man udp来得到相关描述信息 ). 如果使用名字则该名字对应的端口号和相应使用的协议都会被检查如果只是使用一个数字端口号,则只有相应端口号被检查(比如dst port 513 将会使tcpdump抓取tcp协议的login 服务和udp协议的who 服务数据包port domain 将会使tcpdump 抓取tcp协议的domain 服务数据包以及udp 协议的domain 数据包)(nt rt: ambiguous name is used 不可理解需补充).

src port port
如果数据包的源端口为port, 则与此对应的条件表达式为真.

port port
如果数据包的源或目的端口为port, 则与此对应的条件表达式为真.

dst portrange port1-port2
如果数据包(包括ip/tcp, ip/udp, ip6/tcp or ip6/udp协议)的目的端口属于port1port2这个端口范围(包括port1, port2), 则与此对应的条件表达式为真tcpdump port1 port2 解析与对port 的解析一致(nt:dst port port 选项的描述中有说明).

src portrange port1-port2
如果数据包的源端口属于port1port2这个端口范围(包括 port1, port2), 则与此对应的条件表达式为真.

portrange port1-port2
如果数据包的源端口或目的端口属于port1port2这个端口范围(包括 port1, port2), 则与此对应的条件表达式为真.

以上关于port 的选项都可以在其前面添加关键字:tcp 或者udp, 比如:
tcp src port port
这将使tcpdump 只抓取源端口是port tcp数据包.

less length
如果数据包的长度比length 小或等于length, 则与此对应的条件表达式为真这与'len <= length' 的含义一致.

greater length
如果数据包的长度比length 大或等于length, 则与此对应的条件表达式为真这与'len >= length' 的含义一致.

ip proto protocol
如果数据包为ipv4数据包并且其协议类型为protocol, 则与此对应的条件表达式为真.
Protocol 可以是一个数字也可以是名字比如:icmp6, igmp, igrp(nt: Interior Gateway Routing Protocol,内部网关路由协议), pim(Protocol Independent Multicast, 独立组播协议应用于组播路由器),ah, esp(nt: ah, 认证头esp 安全负载封装这两者会用在IP包的安全传输机制中 ), vrrp(Virtual Router Redundancy Protocol, 虚拟路由器冗余协议), udp, or tcp. 由于tcp udp 以及icmptcpdump 的关键字,所以在这些协议名字之前必须要用\来进行转义(如果在C-shell 中需要用\\来进行转义). 注意此表达元不会把数据包中协议头链中所有协议头内容全部打印出来(nt: 实际上只会打印指定协议的一些头部信息比如可以用tcpdump -i eth0 'ip proto \tcp and host 192.168.3.144', 则只打印主机192.168.3.144 发出或接收的数据包中tcp 协议头所包含的信息)

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
ip6 protochain protocol 含义相同但这用在IPv4数据包.

ether broadcast
如果数据包是以太网广播数据包则与此对应的条件表达式为真ether 关键字是可选的.

ip broadcast
如果数据包是IPv4广播数据包则与此对应的条件表达式为真这将使tcpdump 检查广播地址是否符合全0和全1的一些约定,并查找网络接口的网络掩码(网络接口为当时在其上抓包的网络接口).

如果抓包所在网络接口的网络掩码不合法或者此接口根本就没有设置相应网络地址和网络, 亦或是在linux下的'any'网络接口上抓包('any'接口可以收到系统中不止一个接口的数据包(nt: 实际上可理解为系统中所有可用的接口)),网络掩码的检查不能正常进行.


ether multicast
如果数据包是一个以太网多点广播数据包(nt: 多点广播可理解为把消息同时传递给一组目的地址而不是网络中所有地址,后者为可称为广播(broadcast)), 则与此对应的条件表达式为真关键字ether 可以省略此选项的含义与以下条件表达式含义一致:`ether[0] != 0'(nt: 可理解为以太网数据包中第0个字节的最低位是1, 这意味这是一个多点广播数据包).

ip multicast
如果数据包是ipv4多点广播数据包则与此对应的条件表达式为真.

ip6 multicast
如果数据包是ipv6多点广播数据包则与此对应的条件表达式为真.

ether proto protocol
如果数据包属于以下以太协议类型则与此对应的条件表达式为真.
协议(protocol)字段可以是数字或以下所列出了名字ip, ip6, arp, rarp, atalk(AppleTalk网络协议),
aarp(nt: AppleTalk Address Resolution Protocol, AppleTalk网络的地址解析协议),
decnet(nt: 一个由DEC公司所提供的网络协议栈), sca(nt: 未知需补充),
lat(Local Area Transport, 区域传输协议DEC公司开发的以太网主机互联协议),
mopdl, moprc, iso(nt: 未知需补充), stp(Spanning tree protocol, 生成树协议可用于防止网络中产生链接循环),
ipxnt: Internetwork Packet Exchange, Novell 网络中使用的网络层协议)或者
netbeui(nt: NetBIOS Extended User Interface,可理解为网络基本输入输出系统接口扩展).

protocol字段可以是一个数字或以下协议名之一:ip, ip6, arp, rarp, atalk, aarp, decnet, sca, lat,
mopdl, moprc, iso, stp, ipx, 或者netbeui.
必须要注意的是标识符也是关键字从而必须通过'\'来进行转义.

(SNAP:子网接入协议 SubNetwork Access Protocol)

在光纤分布式数据网络接口(其表达元形式可以是'fddi protocol arp'), 令牌环网(其表达元形式可以是'tr protocol arp'),
以及IEEE 802.11 无线局域网(其表达元形式可以是'wlan protocol arp')protocol
标识符来自802.2 逻辑链路控制层头,
FDDI, Token Ring  802.1头中会包含此逻辑链路控制层头.

当以这些网络上的相应的协议标识为过滤条件时tcpdump只是检查LLC头部中以0x000000为组成单元标识符(OUI, 0x000000
标识一个内部以太网)的一段'SNAP格式结构'中的protocol ID 而不会管包中是否有一段OUI0x000000'SNAP格式
结构'(nt: SNAP, SubNetwork Access Protocol,子网接入协议 ). 以下例外:

iso tcpdump 会检查LLC头部中的DSAP(Destination service Access Point, 目标服务接入点)
SSAP(源服务接入点).(nt: iso 协议未知需补充)

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

atalk
tcpdump 将会检查LLC 头部中以0x080007 OUI标识的'SNAP格式结构', 并会检查AppleTalk etype.
(nt: AppleTalk etype 是否位于SNAP格式结构中未知需补充).

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

iso, stp, and netbeui
tcpdump 将会检查802.3 物理帧以及LLC (这两种检查与FDDI, TR, 802.11网络中的相应检查一致);
(nt: 802.3, 理解为IEEE 802.3, 其为一系列IEEE 标准的集合此集合定义了有线以太网络中的物理层以及数据
链路层的媒体接入控制子层stp 在上文已有描述)

atalk
tcpdump 将会检查以太网物理帧中的AppleTalk etype  , 同时也会检查数据包中LLC头部中的'SNAP格式结构'
(这两种检查与FDDI, TR, 802.11网络中的相应检查一致)

aarp tcpdump 将会检查AppleTalk ARP etype 此域或存在于以太网物理帧中或存在于LLC(802.2 所定义)
'SNAP格式结构'当为后者时'SNAP格式结构'OUI标识为0x000000;
(nt: 802.2, 可理解为IEEE802.2, 其中定义了逻辑链路控制层(LLC), 该层对应于OSI 网络模型中数据链路层的上层部分.
LLC 层为使用数据链路层的用户提供了一个统一的接口(通常用户是网络层). LLC层以下是媒体接入控制层(nt: MAC,
对应于数据链路层的下层部分).该层的实现以及工作方式会根据不同物理传输媒介的不同而有所区别(比如以太网令牌环网,
光纤分布数据接口(nt: 实际可理解为一种光纤网络), 无线局域网(802.11), 等等.)

ipx tcpdump 将会检查物理以太帧中的IPX etypeLLC头中的IPX DSAP域,无LLC头并对IPX进行了封装的802.3,
以及LLC 头部'SNAP格式结构'中的IPX etype (nt rt: SNAP frame, 可理解为LLC 头中的'SNAP格式结构'.
该含义属初步理解阶段需补充).

decnet src host
如果数据包中DECNET源地址为host, 则与此对应的条件表达式为真.
(nt:decnet, Digital Equipment Corporation 开发最早用于PDP-11 机器互联的网络协议)

decnet dst host
如果数据包中DECNET目的地址为host, 则与此对应的条件表达式为真.
(nt: decnet 在上文已有说明)

decnet host host
如果数据包中DECNET目的地址或DECNET源地址为host, 则与此对应的条件表达式为真.
(nt: decnet 在上文已有说明)

ifname interface
如果数据包已被标记为从指定的网络接口中接收的则与此对应的条件表达式为真.
(此选项只适用于被OpenBSDpf程序做过标记的包(nt: pf, packet filter, 可理解为OpenBSD中的防火墙程序))

on interface
 ifname interface 含义一致.

rnr num
如果数据包已被标记为匹配PF的规则则与此对应的条件表达式为真.
(此选项只适用于被OpenBSDpf程序做过标记的包(nt: pf, packet filter, 可理解为OpenBSD中的防火墙程序))

rulenum num
 rulenum num 含义一致.

reason code
如果数据包已被标记为包含PF的匹配结果代码则与此对应的条件表达式为真.有效的结果代码有match, bad-offset,
fragment, short, normalize, 以及memory.
(此选项只适用于被OpenBSDpf程序做过标记的包(nt: pf, packet filter, 可理解为OpenBSD中的防火墙程序))

rset name
如果数据包已被标记为匹配指定的规则集则与此对应的条件表达式为真.
(此选项只适用于被OpenBSDpf程序做过标记的包(nt: pf, packet filter, 可理解为OpenBSD中的防火墙程序))

ruleset name
 rset name 含义一致.

srnr num
如果数据包已被标记为匹配指定的规则集中的特定规则(nt: specified PF rule number, 特定规则编号即特定规则),
则与此对应的条件表达式为真.(此选项只适用于被OpenBSDpf程序做过标记的包(nt: pf, packet filter, 可理解为
OpenBSD中的防火墙程序))

subrulenum num
 srnr 含义一致.

action act
如果包被记录时PF会执行act指定的动作则与此对应的条件表达式为真有效的动作有pass, block.
(此选项只适用于被OpenBSDpf程序做过标记的包(nt: pf, packet filter, 可理解为OpenBSD中的防火墙程序))

ip, ip6, arp, rarp, atalk, aarp, decnet, iso, stp, ipx, netbeui
与以下表达元含义一致:
ether proto p
p是以上协议中的一个.

lat, moprc, mopdl
与以下表达元含义一致:
ether proto p
p是以上协议中的一个必须要注意的是tcpdump目前还不能分析这些协议.

vlan [vlan_id]
如果数据包为IEEE802.1Q VLAN 数据包则与此对应的条件表达式为真.
(nt: IEEE802.1Q VLAN, IEEE802.1Q 虚拟网络协议此协议用于不同网络的之间的互联).
如果[vlan_id] 被指定则只有数据包含有指定的虚拟网络id(vlan_id), 则与此对应的条件表达式为真.
要注意的是对于VLAN数据包在表达式中遇到的第一个vlan关键字会改变表达式中接下来关键字所对应数据包中数据的
开始位置(即解码偏移). VLAN网络体系中过滤数据包时vlan [vlan_id]表达式可以被多次使用关键字vlan每出现一次都会增加
4字节过滤偏移(nt: 过滤偏移可理解为上面的解码偏移).

例如:
vlan 100 && vlan 200
表示过滤封装在VLAN100中的VLAN200网络上的数据包
再例如:
vlan && vlan 300 && ip
表示过滤封装在VLAN300 网络中的IPv4数据包VLAN300网络又被更外层的VLAN封装


mpls [label_num]
如果数据包为MPLS数据包则与此对应的条件表达式为真.
(nt: MPLS, Multi-Protocol Label Switch, 多协议标签交换一种在开放的通信网上利用标签引导数据传输的技术).

如果[label_num] 被指定则只有数据包含有指定的标签id(label_num), 则与此对应的条件表达式为真.
要注意的是对于内含MPLS信息的IP数据包(MPLS数据包), 在表达式中遇到的第一个MPLS关键字会改变表达式中接下来关键字所对应数据包中数据的
开始位置(即解码偏移). MPLS网络体系中过滤数据包时mpls [label_num]表达式可以被多次使用关键字mpls每出现一次都会增加
4字节过滤偏移(nt: 过滤偏移可理解为上面的解码偏移).

例如:
mpls 100000 && mpls 1024
表示过滤外层标签为100000 而层标签为1024的数据包

再如:
mpls && mpls 1024 && host 192.9.200.1
表示过滤发往或来自192.9.200.1的数据包该数据包的内层标签为1024, 且拥有一个外层标签.

pppoed
如果数据包为PPP-over-Ethernet的服务器探寻数据包(nt: Discovery packet,
ethernet type 0x8863),则与此对应的条件表达式为真.
(nt: PPP-over-Ethernet, 点对点以太网承载协议其点对点的连接建立分为Discovery阶段(地址发现
PPPoE 会话建立阶段 discovery 数据包就是第一阶段发出来的包ethernet type
是以太帧里的一个字段,用来指明应用于帧数据字段的协议)

pppoes
如果数据包为PPP-over-Ethernet会话数据包(nt: ethernet type 0x8864, PPP-over-Ethernet在上文已有说明可搜索
关键字'PPP-over-Ethernet'找到其描述), 则与此对应的条件表达式为真.

要注意的是对于PPP-over-Ethernet会话数据包在表达式中遇到的第一个pppoes关键字会改变表达式中接下来关键字所对应数据包中数据的
开始位置(即解码偏移).

例如:
pppoes && ip
表示过滤嵌入在PPPoE数据包中的ipv4数据包

tcp, udp, icmp
与以下表达元含义一致:
ip proto or ip6 proto p
其中是以上协议之一(含义分别为如果数据包为ipv4ipv6数据包并且其协议类型为 tcp,udp, icmp则与此对
应的条件表达式为真)

iso proto protocol
如果数据包的协议类型为iso-osi协议栈中protocol协议则与此对应的条件表达式为真.(nt: [初解]iso-osi 网络模型中每
层的具体协议与tcp/ip相应层采用的协议不同iso-osi各层中的具体协议另需补充 )

protocol 可以是一个数字编号或以下名字中之一:
clnp, esis, or isis.
(nt: clnp, Connectionless Network Protocol, 这是OSI网络模型中网络层协议 esis, isis 未知需补充)

clnp, esis, isis
是以下表达的缩写
iso proto p
其中是以上协议之一


l1, l2, iih, lsp, snp, csnp, psnp
IS-IS PDU 类型 的缩写.
(nt: IS-IS PDU, Intermediate system to intermediate system Protocol Data Unit, 中间系统到
中间系统的协议数据单元OSI(Open Systems Interconnection)网络由终端系统中间系统构成.
终端系统指路由器而终端系统指用户设备路由器形成的本地组称之为'区域'Area)和多个区域组成一个''Domain.
IS-IS 提供域内或区域内的路由l1, l2, iih, lsp, snp, csnp, psnp 表示PDU的类型具体含义另需补充)

vpi n
如果数据包为ATM数据包则与此对应的条件表达式为真对于Solaris 操作系统上的SunATM设备 ,
如果数据包为ATM数据包并且其虚拟路径标识为n, 则与此对应的条件表达式为真.
(nt: ATM, Asychronous Transfer Mode, 实际上可理解为由ITU-T(国际电信联盟电信标准化部门)提出的一个与
TCP/IPIP层功能等同的一系列协议具体协议层次另需补充)

vci n
如果数据包为ATM数据包则与此对应的条件表达式为真对于Solaris 操作系统上的SunATM设备 ,
如果数据包为ATM数据包并且其虚拟通道标识为n, 则与此对应的条件表达式为真.
(nt: ATM, 在上文已有描述)

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

llc
如果数据包为ATM数据包则与此对应的条件表达式为真对于Solaris 操作系统上的SunATM设备 ,
如果数据包为ATM数据包, 并且内含LLC则与此对应的条件表达式为真

oamf4s
如果数据包为ATM数据包则与此对应的条件表达式为真对于Solaris 操作系统上的SunATM设备 如果数据包为ATM数据包
并且是Segment OAM F4 信元(VPI=0 并且 VCI=3), 则与此对应的条件表达式为真.

(nt: OAM, Operation Administration and Maintenance, 操作管理和维护,可理解为:ATM网络中用于网络
管理所产生的ATM信元的分类方式.

ATM网络中传输单位为信元要传输的数据终究会被分割成固定长度(53字节)的信元,
(初理解一条物理线路可被复用形成虚拟路径(virtual path). 而一条虚拟路径再次被复用形成虚拟信道(virtual channel)).
通信双方的编址方式为:虚拟路径编号(VPI)/虚拟信道编号(VCI)).

OAM F4 flow 信元又可分为segment 类和end-to-end 其区别未知需补充.)

oamf4e
如果数据包为ATM数据包则与此对应的条件表达式为真对于Solaris 操作系统上的SunATM设备 如果数据包为ATM数据包
并且是 end-to-end OAM F4 信元(VPI=0 并且 VCI=4), 则与此对应的条件表达式为真.
(nt: OAM  end-to-end OAM F4 在上文已有描述可搜索'oamf4s'来定位)

oamf4
如果数据包为ATM数据包则与此对应的条件表达式为真对于Solaris 操作系统上的SunATM设备 如果数据包为ATM数据包
并且是 end-to-end  segment OAM F4 信元(VPI=0 并且 VCI=3 或者 VCI=4), 则与此对应的条件表达式为真.
(nt: OAM  end-to-end OAM F4 在上文已有描述可搜索'oamf4s'来定位)

oam
如果数据包为ATM数据包则与此对应的条件表达式为真对于Solaris 操作系统上的SunATM设备 如果数据包为ATM数据包
并且是 end-to-end  segment OAM F4 信元(VPI=0 并且 VCI=3 或者 VCI=4), 则与此对应的条件表达式为真.
(nt: 此选项与oamf4重复需确认)

metac
如果数据包为ATM数据包则与此对应的条件表达式为真对于Solaris 操作系统上的SunATM设备 如果数据包为ATM数据包
并且是来自'元信令线路'(nt: VPI=0 并且 VCI=1, '元信令线路', meta signaling circuit, 具体含义未知需补充),
则与此对应的条件表达式为真.

bcc
如果数据包为ATM数据包则与此对应的条件表达式为真对于Solaris 操作系统上的SunATM设备 如果数据包为ATM数据包
并且是来自'广播信令线路'(nt: VPI=0 并且 VCI=2, '广播信令线路', broadcast signaling circuit, 具体含义未知需补充),
则与此对应的条件表达式为真.

sc
如果数据包为ATM数据包则与此对应的条件表达式为真对于Solaris 操作系统上的SunATM设备 如果数据包为ATM数据包
并且是来自'信令线路'(nt: VPI=0 并且 VCI=5, '信令线路', signaling circuit, 具体含义未知需补充),
则与此对应的条件表达式为真.

ilmic
如果数据包为ATM数据包则与此对应的条件表达式为真对于Solaris 操作系统上的SunATM设备 如果数据包为ATM数据包
并且是来自'ILMI线路'(nt: VPI=0 并且 VCI=16, 'ILMI', Interim Local Management Interface 可理解为
基于SNMP(简易网络管理协议)的用于网络管理的接口)
则与此对应的条件表达式为真.

connectmsg

如果数据包为ATM数据包则与此对应的条件表达式为真对于Solaris 操作系统上的SunATM设备 如果数据包为ATM数据包
并且是来自'信令线路'并且是Q.2931协议中规定的以下几种消息Setup, Calling Proceeding, Connect,
Connect Ack, Release, 或者Release Done. 则与此对应的条件表达式为真.
(nt: Q.2931 ITU(国际电信联盟)制定的信令协议其中规定了在宽带综合业务数字网络的用户接口层建立维护取消
网络连接的相关步骤.)

metaconnect
如果数据包为ATM数据包则与此对应的条件表达式为真对于Solaris 操作系统上的SunATM设备 如果数据包为ATM数据包
并且是来自'元信令线路'并且是Q.2931协议中规定的以下几种消息Setup, Calling Proceeding, Connect,
Connect Ack, Release, 或者Release Done. 则与此对应的条件表达式为真.

expr relop expr
如果relop 两侧的操作数(expr)满足relop 指定的关系则与此对应的条件表达式为真.
relop 可以是以下关系操作符之一>, <, <=, =, !=.
expr 是一个算术表达式此表达式中可使用整型常量(表示方式与标准C中一致), 二进制操作符(+, -, *, /, &, |,
<<, >>), 长度操作符以及对特定数据包中数据的引用操作符要注意的是所有的比较操作都默认操作数是无符号的,
例如0x80000000  0xffffffff 都是大于0(nt: 对于有符号的比较按照补码规则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(wlan,无线局域网)某些数据包中的附带的
"radio"(nt: 其中描述了波特率数据加密等信息)).
要注意的是tcp, udp 等上层协议目前只能应用于网络层采用为IPv4IPv6协议的网络(此限制会在tcpdump未来版本中
进行修改). 对于指定协议的所需数据其在包数据中的偏移字节由expr 来指定.

以上表达中size 是可选的用来指明我们关注那部分数据段的长度(nt:通常这段数据
是数据包的一个域) 其长度可以是1, 2, 4个字节如果不给定size, 默认是1个字节长度操作符的关键字为len,
这代码整个数据包的长度.

例如'ether[0] != 0' 将会使tcpdump 抓取所有多点广播数据包.(nt: ether[0]字节的最低位为1表示
数据包目的地址是多点广播地址). 'ip[0] 0xf != 5' 对应抓取所有带有选项的
IPv4数据包'ip[6:2] 0x1fff 0'对应抓取没被破碎的IPv4数据包或者
其片段编号为0的已破碎的IPv4数据包这种数据检查方式也适用于tcpudp数据的引用,
tcp[0]对应于TCP 头中第一个字节而不是对应任何一个中间的字节.

一些偏移以及域的取值除了可以用数字也可用名字来表达以下为可用的一些域(协议头中的域)的名字icmptype (ICMP 协议头
type), icmpcode (ICMP 协议头code ), 以及tcpflags(TCP协议头的flags )

以下为ICMP 协议头中type 域的可用取值:
icmp-echoreply, icmp-unreach, icmp-sourcequench, icmp-redirect, icmp-echo, icmp-routeradvert,
icmp-routersolicit, icmp-timx-ceed, icmp-paramprob, icmp-tstamp, icmp-tstampreply,
icmp-ireq, icmp-ireqreply, icmp-maskreq, icmp-maskreply.

以下为TCP 协议头中flags 域的可用取值:tcp-fin, tcp-syn, tcp-rst, tcp-push,
tcp-ack, tcp-urg.

 

太多了。。。先保存下来用的时候方便查

 

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有