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

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 Arcgis相交分析无法绘制一个或多个图形
  • ¥15 seatunnel-web使用SQL组件时候后台报错,无法找到表格
  • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)
  • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误
  • ¥30 3天&7天&&15天&销量如何统计同一行
  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?
  • ¥20 关于#单片机#的问题:项目:使用模拟iic与ov2640通讯环境:F407问题:读取的ID号总是0xff,自己调了调发现在读从机数据时,SDA线上并未有信号变化(语言-c语言)