libpcap包过滤-pcap_compile()



        pcap_compile()是用来把用户输入的过滤字符串编译进过滤信息的,这个过滤信息可以决定哪些包是用户可获取到的 。


        过滤表达式包含一个或多个元素。每个元素通常包含由多个或一个被修饰符修饰的id名称或数字,有三种不同的修饰符:
       类型修饰符     说明id属于那种类型。可以用的类型修饰符有host,net,port,portrange。例如‘host foo’, ‘net      128.3’, ‘port 20’, ‘por-trange 6000-6008’。如果id没有指定类型,则host是默认。
       路径方向修饰符  指定id的路径方向。可以用的路径修饰符有src, dst, src or    dst,srcand dst,   addr1, addr2, addr3,  and  addr4.举例‘src foo’, ‘dst net 128.3’, ‘src  
or dst port ftp-data’.如果id没有路径修饰符,默认src or dst。addr1, addr2, addr3, and addr4仅用于无限网络,在链路层,如果是混杂模式,可以用inbound,outbound来指定过滤方向
       协议修饰符      来限制匹配的协议。可以用的协议修饰符ether, fddi, tr, wlan, ip, ip6, arp, rarp, decnet, tcp and udp。举例ether src foo’,‘arp net 128.3’, ‘tcp port 21
’, ‘udp portrange 7000-7009’, ‘wlan addr2 0:2:3:4:5:6’. 如果没有制定协议,则默认是所有协议都匹配,比如‘src  foo’,ip arp rarp的协议都匹配
 

       fddi协议等同于ether协议,在语法解析器中,fddi与ether含义一样,fddi头部信息包含以太网源、目的地址,还包含包的类型,可以指定fddi头部域的信息来过滤指定的域。fddi头还包含其他的域,但是不能应用与过滤。


       tr和wlan在过滤解析器中,含义等同于ether。以前版本的fddi头部信息也适用于802.11无线局域网的头。
除了以上三种修饰符,还有一些特殊的修饰符和算术运算式:gateway, broadcast, less, greater。如下所示算术运算式:
       and or not       
       可以用and、or、not来组合复杂的过滤表达式。比如‘host foo and not port ftp and not port ftp-data’,如果多个表达式以and、 or、 not来组合,多个表达式有相同的修饰符,则可以
省略除第一个表达式以外,比如‘tcp dst port ftp or ftp-data or domain’等同于‘tcp dst port ftp or tcp dst port ftp-data or tcp dstport domain’
 
       允许的过滤表达式:

       dst host host
       包的目的ip,可以是ip地址也可以是域名


       src host host
       
包的源ip


       host host
       匹配包的源或则目的ip

       以上的表达式都可以用ip、arp、rarp、ip6,比如ip host host,包是ip协议,包的源ip或目的ip是host的,如果host是多播ip地址,那么每个地址都会匹配。


       ether dst ehost
       匹配以太网头的目的地址


       ether src ehost
       匹配以太网头的源地址


       ether host ehost
       匹配以太网源或目的地址


       gateway host
       匹配网关地址,以太网头的目的或者源地址是网关但不能以ip头的源或目的地址为网关,网关host必须存在于设备的域名解析文件中,不适用于ipv6


       dst net net
       匹配范围内包的目的ip地址(一段范围的ip地址),net可以是网络文件中的名称,也可以是一个网ip地址,一个ipv4的ip地址可以是以点分制的数字,如192.168.1.1则对应的网络掩码
是255.255.255.255,192.168.1则对应的网络掩码是255.255.255.0,192.168则对应的网络掩码是254.254.0.0,ipv6的ip地址必须是完整的,所以ipv6的匹配等同于ip地址匹配
 

       src net net
       匹配范围内包的源ip地址


       net net
       匹配范围内包的源或者目的ip地址
        

       net net mask netmask
       匹配指定的ip地址net以及掩码netmask,可以指定src或者dst。不支持ipv6


       net net/len
       匹配指定的ip地址,类似192.168.10.1/24 等同于 192.168.10.1 和掩码254.254.254.0,可以指定src或dst


       dst port port
       匹配指定的包的目的端port,port可以是数字或者/etc/services 文件中的端口对应的名称,如果使用名称,则只匹 配名称对应的端口和协议,如果是数字,则只匹配端口号


       src port port
       匹配包的指定源端口


       port port
       匹配源或在目的端口为port的包


       dst portrange port1-port2
       匹配目的端口在port1-port2之间的包


       src portrange port1-port2
       匹配源端口在port1-port2之间的包


       portrange port1-port2
       匹配源端口或目的端口在port1-port2之间的包

       以上关于端口和端口范围匹配的表达式可以用tcp或udp来指定协议


       less length
       匹配长度小于指定的长度length的包


       greater length
       匹配长度大于指定长度length的包
          
       ip proto protocol
       匹配协议为protocol的ip包,protocol可以使一个数字也可以是字符串(icmp, icmp6, igmp, igrp, pim, ahesp, vrrp, udp, tcp),注意因为tcp udp icmp本身是修饰符所以可以前面

加用反斜杠来表示
      
       ip6 proto protocol
       匹配协议为protocol的ipv6的包

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值