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的包


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM