pcap_compile

本文详细解读了pcap_compile()函数的作用,介绍了过滤表达式的元素、类型、路径和协议修饰符,以及特殊修饰符和算术运算的应用,涵盖了IP地址、端口、协议匹配等关键知识点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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、付费专栏及课程。

余额充值