热门关键字: jsp web pl/sql pl webwor   →开发工具  操作系统
当前位置 : 无忧IT编程网 > 其它语言 > C++ > 正文

对过滤串表达式的语法分析

来源:转载作者:无忧时间:08-01-24
wpcap的过滤器是以已声明的谓词语法为基础的。过滤器是一个ASCII字符串,它包含了一个过滤表达式。pcap_compile()把这个表达式编译成内核级的包过滤器。

这个表达式会选择那些数据包将会被堆存。如果表达式没有给出,那么,网络上所有的包都会被内核过滤引擎所认可。不然,只有那些表达式为'true'的包才会被认可。

这个表达式包含了一个或多个原语。原语通常包含了id(名字或序列),这些id优先于限定词。以下是三种不同的限定词:

输入(type)
指明了哪些东西是id所代表的。可能的输入是hostnetport。比如:`host foo',`net 128.3',`port 20'。如果没有输入限定词,就假定是host
方向(dir)
由id指明了一个特定的传输方向。可能的方向是srcdstsrc or dst。比如,'src foo','dst net 128.3',`src or dst port ftp-data'。如果没有指定,就假定是src or dst。如果没有链路层(比如,像slip这样的点对点协议),那么限定词可以使用inboundoutbound,来指明一个方向。
协议(proto)
限定词限制了所匹配的协议。可能的协议有:etherfdditripip6arprarpdecnettcpudp。比如:`ether src foo',`arp net 128.3',`tcp port 21'。如果没有指定协议限定词,那么就假定所有的协议都会被允许。例如:'src foo'等价于'(ip or arp or rarp)src foo'(当然,不能有不符合语法的字母出现),'net bar'等价于'(ip or arp or rarp) net bar','port53'等价于'(tcp or udp) port 53'。

[ 'fddi'通常是'ether'的别名;解析器会认为它们是在特定网络接口上的数据链路层。FDDI的首部包含了和以太网很相似的源地址和目的地址,并且通常也包含了和以太网很相似的数据包类型。所以,在FDDI网域上使用过滤器和在以太网上使用过滤器基本一致。FDDI的首部还包括了其他的数据,不过你不能在过滤器表达式内表示他们。

同样的,'tr'也是'ether'的一个别名,它是较早被应用于FDDI的首部,也应用在令牌环网络首部。]

除了以上内容,还有一些特殊的限定词和上面的形式不太一样,它们是:gatewaybroadcastlessgreater和一些算术表达式。这些内容会在下面和大家介绍。

我们可以使用andornot将原语连接起来,来构造一个更复杂的过滤表达式。例如:`host foo and not port ftp and not port ftp-data'。如果要简化输入,我们可以把已列出的id限定词省略。比如:`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/v6数据包的目标域(destination field)为host时为true,host既可以是地址,也可以是名字。
src host host
当IPv4/v6数据包的源域(source field)为host时为true。
host host
当IPv4/v6数据包的源域(source field)或目标域(destination field)为host时为true。以上任何一个host表达式可以是iparprarpip6开头,如下所示:
ip host host
等价于:
ether proto \ip and host host
如果host是一个多IP地址,那么每一个地址都会被匹配。

            

最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 验证码: 验证码
查看所有评论
相关文章
站长推荐