wireshark抓包过滤条件.docx
《wireshark抓包过滤条件.docx》由会员分享,可在线阅读,更多相关《wireshark抓包过滤条件.docx(15页珍藏版)》请在冰豆网上搜索。
![wireshark抓包过滤条件.docx](https://file1.bdocx.com/fileroot1/2023-1/4/e58a4443-d0d9-44e0-b002-94c157de4027/e58a4443-d0d9-44e0-b002-94c157de40271.gif)
wireshark抓包过滤条件
附录:
tcpdump的表达元
(nt:
True在以下的描述中含义为:
相应条件表达式中只含有以下所列的一个特定表达元,此时表达式为真,即条件得到满足)
dsthosthost
如果IPv4/v6数据包的目的域是host,则与此对应的条件表达式为真.host可以是一个ip地址,也可以是一个主机名.
srchosthost
如果IPv4/v6数据包的源域是host,则与此对应的条件表达式为真.
host可以是一个ip地址,也可以是一个主机名.
hosthost
如果IPv4/v6数据包的源或目的地址是host,则与此对应的条件表达式为真.以上的几个host表达式之前可以添加以下关键字:
ip,arp,rarp,以及ip6.比如:
iphosthost
也可以表达为:
etherproto\ipandhosthost(nt:
这种表达方式在下面有说明,其中ip之前需要有\来转义,因为ip对tcpdump来说已经是一个关键字了.)
如果host是一个拥有多个IP的主机,那么任何一个地址都会用于包的匹配(nt:
即发向host的数据包的目的地址可以是这几个IP中的任何一个,从host接收的数据包的源地址也可以是这几个IP中的任何一个).
etherdstehost
如果数据包(nt:
指tcpdump可抓取的数据包,包括ip数据包,tcp数据包)的以太网目标地址是ehost,则与此对应的条件表达式为真.Ehost可以是/etc/ethers文件中的名字或一个数字地址(nt:
可通过manethers看到对/etc/ethers文件的描述,样例中用的是数字地址)
ethersrcehost
如果数据包的以太网源地址是ehost,则与此对应的条件表达式为真.
etherhostehost
如果数据包的以太网源地址或目标地址是ehost,则与此对应的条件表达式为真.
gatewayhost
如果数据包的网关地址是host,则与此对应的条件表达式为真.需要注意的是,这里的网关地址是指以太网地址,而不是IP地址(nt|rt:
I.e.,例如,可理解为'注意'.theEthernetsourceordestinationaddress,以太网源和目标地址,可理解为,指代上句中的'网关地址').host必须是名字而不是数字,并且必须在机器的'主机名-ip地址'以及'主机名-以太地址'两大映射关系中有其条目(前一映射关系可通过/etc/hosts文件,DNS或NIS得到,而后一映射关系可通过/etc/ethers文件得到.nt:
/etc/ethers并不一定存在,可通过manethers看到其数据格式,如何创建该文件,未知,需补充).也就是说host的含义是etherhostehost而不是hosthost,并且ehost必须是名字而不是数字.
目前,该选项在支持IPv6地址格式的配置环境中不起作用(nt:
configuration,配置环境,可理解为,通信双方的网络配置).
dstnetnet
如果数据包的目标地址(IPv4或IPv6格式)的网络号字段为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:
可通过下面的netnet/len来指定)
srcnetnet
如果数据包的源地址(IPv4或IPv6格式)的网络号字段为net,则与此对应的条件表达式为真.
netnet
如果数据包的源或目的地址(IPv4或IPv6格式)的网络号字段为net,则与此对应的条件表达式为真.
netnetmasknetmask
如果数据包的源或目的地址(IPv4或IPv6格式)的网络掩码与netmask匹配,则与此对应的条件表达式为真.此选项之前还可以配合src和dst来匹配源网络地址或目标网络地址(nt:
比如srcnetnetmask255.255.255.0).该选项对于ipv6网络地址无效.
netnet/len
如果数据包的源或目的地址(IPv4或IPv6格式)的网络编号字段的比特数与len相同,则与此对应的条件表达式为真.此选项之前还可以配合src和dst来匹配源网络地址或目标网络地址(nt|rt|tt:
srcnetnet/24,表示需要匹配源地址的网络编号有24位的数据包).
dstportport
如果数据包(包括ip/tcp,ip/udp,ip6/tcporip6/udp协议)的目的端口为port,则与此对应的条件表达式为真.port可以是一个数字也可以是一个名字(相应名字可以在/etc/services中找到该名字,也可以通过mantcp和manudp来得到相关描述信息).如果使用名字,则该名字对应的端口号和相应使用的协议都会被检查.如果只是使用一个数字端口号,则只有相应端口号被检查(比如,dstport513将会使tcpdump抓取tcp协议的login服务和udp协议的who服务数据包,而portdomain将会使tcpdump抓取tcp协议的domain服务数据包,以及udp协议的domain数据包)(nt|rt:
ambiguousnameisused不可理解,需补充).
srcportport
如果数据包的源端口为port,则与此对应的条件表达式为真.
portport
如果数据包的源或目的端口为port,则与此对应的条件表达式为真.
dstportrangeport1-port2
如果数据包(包括ip/tcp,ip/udp,ip6/tcporip6/udp协议)的目的端口属于port1到port2这个端口范围(包括port1,port2),则与此对应的条件表达式为真.tcpdump对port1和port2解析与对port的解析一致(nt:
在dstportport选项的描述中有说明).
srcportrangeport1-port2
如果数据包的源端口属于port1到port2这个端口范围(包括port1,port2),则与此对应的条件表达式为真.
portrangeport1-port2
如果数据包的源端口或目的端口属于port1到port2这个端口范围(包括port1,port2),则与此对应的条件表达式为真.
以上关于port的选项都可以在其前面添加关键字:
tcp或者udp,比如:
tcpsrcportport
这将使tcpdump只抓取源端口是port的tcp数据包.
lesslength
如果数据包的长度比length小或等于length,则与此对应的条件表达式为真.这与'len<=length'的含义一致.
greaterlength
如果数据包的长度比length大或等于length,则与此对应的条件表达式为真.这与'len>=length'的含义一致.
ipprotoprotocol
如果数据包为ipv4数据包并且其协议类型为protocol,则与此对应的条件表达式为真.
Protocol可以是一个数字也可以是名字,比如:
icmp6,igmp,igrp(nt:
InteriorGatewayRoutingProtocol,内部网关路由协议),pim(ProtocolIndependentMulticast,独立组播协议,应用于组播路由器),ah,esp(nt:
ah,认证头,esp安全负载封装,这两者会用在IP包的安全传输机制中),vrrp(VirtualRouterRedundancyProtocol,虚拟路由器冗余协议),udp,ortcp.由于tcp,udp以及icmp是tcpdump的关键字,所以在这些协议名字之前必须要用\来进行转义(如果在C-shell中需要用\\来进行转义).注意此表达元不会把数据包中协议头链中所有协议头内容全部打印出来(nt:
实际上只会打印指定协议的一些头部信息,比如可以用tcpdump-ieth0'ipproto\tcpandhost192.168.3.144',则只打印主机192.168.3.144发出或接收的数据包中tcp协议头所包含的信息)
ip6protoprotocol
如果数据包为ipv6数据包并且其协议类型为protocol,则与此对应的条件表达式为真.
注意此表达元不会把数据包中协议头链中所有协议头内容全部打印出来
ip6protochainprotocol
如果数据包为ipv6数据包并且其协议链中包含类型为protocol协议头,则与此对应的条件表达式为真.比如,
ip6protochain6
将匹配其协议头链中拥有TCP协议头的IPv6数据包.此数据包的IPv6头和TCP头之间可能还会包含验证头,路由头,或者逐跳寻径选项头.
由此所触发的相应BPF(BerkeleyPacketsFilter,可理解为,在数据链路层提供数据包过滤的一种机制)代码比较繁琐,
并且BPF优化代码也未能照顾到此部分,从而此选项所触发的包匹配可能会比较慢.
ipprotochainprotocol
与ip6protochainprotocol含义相同,但这用在IPv4数据包.
etherbroadcast
如果数据包是以太网广播数据包,则与此对应的条件表达式为真.ether关键字是可选的.
ipbroadcast
如果数据包是IPv4广播数据包,则与此对应的条件表达式为真.这将使tcpdump检查广播地址是否符合全0和全1的一些约定,并查找网络接口的网络掩码(网络接口为当时在其上抓包的网络接口).
如果抓包所在网络接口的网络掩码不合法,或者此接口根本就没有设置相应网络地址和网络,亦或是在linux下的'any'网络接口上抓包(此'any'接口可以收到系统中不止一个接口的数据包(nt:
实际上,可理解为系统中所有可用的接口)),网络掩码的检查不能正常进行.
ethermulticast
如果数据包是一个以太网多点广播数据包(nt:
多点广播,可理解为把消息同时传递给一组目的地址,而不是网络中所有地址,后者为可称为广播(broadcast)),则与此对应的条件表达式为真.关键字ether可以省略.此选项的含义与以下条件表达式含义一致:
`ether[0]&1!
=0'(nt:
可理解为,以太网数据包中第0个字节的最低位是1,这意味这是一个多点广播数据包).
ipmulticast
如果数据包是ipv4多点广播数据包,则与此对应的条件表达式为真.
ip6multicast
如果数据包是ipv6多点广播数据包,则与此对应的条件表达式为真.
etherprotoprotocol
如果数据包属于以下以太协议类型,则与此对应的条件表达式为真.
协议(protocol)字段,可以是数字或以下所列出了名字:
ip,ip6,arp,rarp,atalk(AppleTalk网络协议),
aarp(nt:
AppleTalkAddressResolutionProtocol,AppleTalk网络的地址解析协议),
decnet(nt:
一个由DEC公司所提供的网络协议栈),sca(nt:
未知,需补充),
lat(LocalAreaTransport,区域传输协议,由DEC公司开发的以太网主机互联协议),
mopdl,moprc,iso(nt:
未知,需补充),stp(Spanningtreeprotocol,生成树协议,可用于防止网络中产生链接循环),
ipx(nt:
InternetworkPacketExchange,Novell网络中使用的网络层协议),或者
netbeui(nt:
NetBIOSExtendedUserInterface,可理解为,网络基本输入输出系统接口扩展).
protocol字段可以是一个数字或以下协议名之一:
ip,ip6,arp,rarp,atalk,aarp,decnet,sca,lat,
mopdl,moprc,iso,stp,ipx,或者netbeui.
必须要注意的是标识符也是关键字,从而必须通过'\'来进行转义.
(SNAP:
子网接入协议(SubNetworkAccessProtocol))
在光纤分布式数据网络接口(其表达元形式可以是'fddiprotocolarp'),令牌环网(其表达元形式可以是'trprotocolarp'),
以及IEEE802.11无线局域网(其表达元形式可以是'wlanprotocolarp')中,protocol
标识符来自802.2逻辑链路控制层头,
在FDDI,TokenRing或802.1头中会包含此逻辑链路控制层头.
当以这些网络上的相应的协议标识为过滤条件时,tcpdump只是检查LLC头部中以0x000000为组成单元标识符(OUI,0x000000
标识一个内部以太网)的一段'SNAP格式结构'中的protocolID域,而不会管包中是否有一段OUI为0x000000的'SNAP格式
结构'(nt:
SNAP,SubNetworkAccessProtocol,子网接入协议).以下例外:
isotcpdump会检查LLC头部中的DSAP域(DestinationserviceAccessPoint,目标服务接入点)和
SSAP域(源服务接入点).(nt:
iso协议未知,需补充)
stp以及netbeui
tcpdump将会检查LLC头部中的目标服务接入点(DestinationserviceAccessPoint);
atalk
tcpdump将会检查LLC头部中以0x080007为OUI标识的'SNAP格式结构',并会检查AppleTalketype域.
(nt:
AppleTalketype是否位于SNAP格式结构中,未知,需补充).
此外,在以太网中,对于etherprotoprotocol选项,tcpdump会为protocol所指定的协议检查
以太网类型域(theEthernettypefield),但以下这些协议除外:
iso,stp,andnetbeui
tcpdump将会检查802.3物理帧以及LLC头(这两种检查与FDDI,TR,802.11网络中的相应检查一致);
(nt:
802.3,理解为IEEE802.3,其为一系列IEEE标准的集合.此集合定义了有线以太网络中的物理层以及数据
链路层的媒体接入控制子层.stp在上文已有描述)
atalk
tcpdump将会检查以太网物理帧中的AppleTalketype域, 同时也会检查数据包中LLC头部中的'SNAP格式结构'
(这两种检查与FDDI,TR,802.11网络中的相应检查一致)
aarptcpdump将会检查AppleTalkARPetype域,此域或存在于以太网物理帧中,或存在于LLC(由802.2所定义)的
'SNAP格式结构'中,当为后者时,该'SNAP格式结构'的OUI标识为0x000000;
(nt:
802.2,可理解为,IEEE802.2,其中定义了逻辑链路控制层(LLC),该层对应于OSI网络模型中数据链路层的上层部分.
LLC层为使用数据链路层的用户提供了一个统一的接口(通常用户是网络层).LLC层以下是媒体接入控制层(nt:
MAC层,
对应于数据链路层的下层部分).该层的实现以及工作方式会根据不同物理传输媒介的不同而有所区别(比如,以太网,令牌环网,
光纤分布数据接口(nt:
实际可理解为一种光纤网络),无线局域网(802.11),等等.)
ipxtcpdump将会检查物理以太帧中的IPXetype域,LLC头中的IPXDSAP域,无LLC头并对IPX进行了封装的802.3帧,
以及LLC头部'SNAP格式结构'中的IPXetype域(nt|rt:
SNAPframe,可理解为,LLC头中的'SNAP格式结构'.
该含义属初步理解阶段,需补充).
decnetsrchost
如果数据包中DECNET源地址为host,则与此对应的条件表达式为真.
(nt:
decnet,由DigitalEquipmentCorporation开发,最早用于PDP-11机器互联的网络协议)
decnetdsthost
如果数据包中DECNET目的地址为host,则与此对应的条件表达式为真.
(nt:
decnet在上文已有说明)
decnethosthost
如果数据包中DECNET目的地址或DECNET源地址为host,则与此对应的条件表达式为真.
(nt:
decnet在上文已有说明)
ifnameinterface
如果数据包已被标记为从指定的网络接口中接收的,则与此对应的条件表达式为真.
(此选项只适用于被OpenBSD中pf程序做过标记的包(nt:
pf,packetfilter,可理解为OpenBSD中的防火墙程序))
oninterface
与ifnameinterface含义一致.
rnrnum
如果数据包已被标记为匹配PF的规则,则与此对应的条件表达式为真.
(此选项只适用于被OpenBSD中pf程序做过标记的包(nt:
pf,packetfilter,可理解为OpenBSD中的防火墙程序))
rulenumnum
与rulenumnum含义一致.
reasoncode
如果数据包已被标记为包含PF的匹配结果代码,则与此对应的条件表达式为真.有效的结果代码有:
match,bad-offset,
fragment,short,normalize,以及memory.
(此选项只适用于被OpenBSD中pf程序做过标记的包(nt:
pf,packetfilter,可理解为OpenBSD中的防火墙程序))
rsetname
如果数据包已被标记为匹配指定的规则集,则与此对应的条件表达式为真.
(此选项只适用于被OpenBSD中pf程序做过标记的包(nt:
pf,packetfilter,可理解为OpenBSD中的防火墙程序))
rulesetname
与rsetname含义一致.
srnrnum
如果数据包已被标记为匹配指定的规则集中的特定规则(nt:
specifiedPFrulenumber,特定规则编号,即特定规则),
则与此对应的条件表达式为真.(此选项只适用于被OpenBSD中pf程序做过标记的包(nt:
pf,packetfilter,可理解为
OpenBSD中的防火墙程序))
subrulenumnum
与srnr含义一致.
actionact
如果包被记录时PF会执行act指定的动作,则与此对应的条件表达式为真.有效的动作有:
pass,block.
(此选项只适用于被OpenBSD中pf程序做过标记的包(nt:
pf,packetfilter,可理解为OpenBSD中的防火墙程序))
ip,ip6,arp,rarp,atalk,aarp,decnet,iso,stp,ipx,netbeui
与以下表达元含义一致:
etherprotop
p是以上协议中的一个.
lat,moprc,mopdl
与以下表达元含义一致:
etherprotop
p是以上协议中的一个.必须要注意的是tcpdump目前还不能分析这些协议.
vlan[vlan_id]
如果数据包为IEEE802.1QVLAN数据包,则与此对应的条件表达式为真.
(nt:
IEEE802.1QVLAN,即IEEE802.1Q虚拟网络协议,此协议用于不同网络的之间的互联).
如果[vlan_id]被指定,则只有数据包含有指定的虚拟网络id(vlan_id),则与此对应的条件表达式为真.
要注意的是,对于VLAN数据包,在表达式中遇到的第一个vlan关键字会改变表达式中接下来关键字所对应数据包中数据的
开始位置(即解码偏移).在VLAN网络体系中过滤数据包时,vlan[vlan_id]表达式可以被多次使用.关键字vlan每出现一次都会增加
4字节过滤偏移(nt:
过滤偏移,可理解为上面的解码偏移).
例如:
vlan100&&vlan200
表示:
过滤封装在VLAN100中的VLAN200网络上的数据包
再例如:
vlan&&vlan300&&ip
表示:
过滤封装在VLAN300网络中的IPv4数据包,而VLAN300网络又被更外层的VLAN封装
mpls[label_num]
如果数据包为MPLS数据包,则与此对应的条件表达式为真.
(nt:
MPLS,Multi-ProtocolLabelSwitch,多协议标签交换,一种在开放的通信网上利用标签引导数据传输的技术).
如果[label_num]被指定,则只有数据包含有指定的标签id(label_num),则与此对应的条件表达式为真.
要注意的是,对于内含MPLS信息的IP数据包(即MPLS数据包),在表达式中遇到的第一个MPLS关键字会改变表达式中接下来关键字所对应数据包中数据的
开始位置(即解码偏移).在MPLS网络体系中过滤数据包时,mpls[label_num]表达式可以被多次使用.关键字mpls每出现一次都会增加
4字节过滤偏移(nt:
过滤偏移,可理解为上面的解码偏移).
例如:
mpls100000&&mpls102