崔5220 2015-05-22 00:50 采纳率: 0%
浏览 3648

Winpcap中关于过滤规则的问题

我看已有的实例上是允许获取TCP,UDP,ARP协议的数据包,但我不知道他的这个过滤
的规则具体写在哪里。我本人要做的是除了以上协议也允许获取OSPF协议的数据包,
求大神指教,我需要改哪里。具体代码如下:
struct bpf_program fcode;
bpf_u_int32 NetMask;
NetMask=0xffffff;
pcap_t *pCap;
char strErrorBuf[1025];
//OnButtonFiltersave();
char filter[1024];

strcpy(filter, m_strFilterString.GetBuffer(m_strFilterString.GetLength()));
m_strFilterString.ReleaseBuffer();

if( getDevice() != NULL )
{       
    if((pCap=pcap_open_live(getDevice()->name,65536,1,1000,strErrorBuf))==NULL)
    {       
        return ;
    }
    if(pcap_compile(pCap, &fcode, filter, 1, NetMask) < 0)
    {
        //fprintf(stderr,"\nError compiling filter: wrong syntax.\n");
        AfxMessageBox("编译字符串失败,请确认你的规则编写的正确性,或查看帮助文档中规则的编写规范");
        return ;
    }
    AfxMessageBox("规则:"+m_strFilterString+"\n测试通过!!!!");    
    pcap_close(pCap);
}
else
    AfxMessageBox("当前没有选持要测试的网卡");
  • 写回答

2条回答 默认 最新

  • WorldMobile 2015-05-22 02:39
    关注

    WinPcap过滤规则

    下面对WinPcap的过滤表达式语法进行一下简要的介绍,其中关键字用黑体字表示。
    1) 表达式支持逻辑操作符,可以使用关键字 and、or、not对子表达式进行组合,同时支持使用小括号。
    2) 基于协议的过滤要使用协议限定符,协议限定符可以为ip、arp、rarp、tcp、udp等。
    3) 基于MAC地址的过滤要使用限定符ether(代表以太网地址)、当该MAC地址仅作为源地址时表达式为ether src mac_addr,仅作为目的地址时,表达式为ether dst mac_addr,既作为源地址又作为目的地址时的表达式为ether host mac_addr。此外应注意mac_addr应该遵从00:E0:4C:E0:38:88的格式,否则编译过滤器时会出错。
    4) 基于IP地址的过滤应该使用限定符host(代表主机地址)。当该IP地址仅作为源地址时过滤表达式应为 src host ip_addr,仅作为目的地址时的表达式为 dst host ip_addr,既作为源地址又作为目的地址时表达式为 host ip_addr。
    5) 基于端口的过滤应使用限定符 port。例如仅接收80端口的数据包则表达式为port 80。

    下边给出两个例子:
    例1:只捕获arp或icmp数据包。
    过滤表达式:arp or (ip and icmp)
    例2:捕获主机192.168.1.23与192.168.1.28之间传递的所有UDP数据包。
    过滤表达式:(ip and udp)and( host 192.168.1.23 or host 192.168.1.28)

    评论

报告相同问题?

悬赏问题

  • ¥15 fesafe材料库问题
  • ¥35 beats蓝牙耳机怎么查看日志
  • ¥15 Fluent齿轮搅油
  • ¥15 八爪鱼爬数据为什么自己停了
  • ¥15 交替优化波束形成和ris反射角使保密速率最大化
  • ¥15 树莓派与pix飞控通信
  • ¥15 自动转发微信群信息到另外一个微信群
  • ¥15 outlook无法配置成功
  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统