Wincap设置过滤器,该如何解决

来源:学生作业帮助网 编辑:作业帮 时间:2024/11/15 20:22:33
Wincap设置过滤器,该如何解决
xVOVWV%$a{#Ӷj/q-YAS#!@@K t8]*kĿk'$6Y{ws?ƿөWk5)rU%'Kv֎껱=/#AuVj~ ї}#gۜAD&+ia@?Bft5/ast[l~!&CBƴG DҀƴkC|"+ sy-. js `s7lc qKl,~.("IpC>ld29n,*& Y}31(HUOHl_1±f1 8uZV_Ivc!tN PyF2n E&CuyYNPtWHYOC~1wfbV~dv '>(bqjDc.u'SSXY-6hV6ܫ94vk+ m[g?+i&V3;nkI~j`[H;Mj9R߷ϳh⴦:?X/los[H~ N?~d}p ]Ir8d7'{򜖳BPw|zc78,H;h\@7U/n9%.ݪ1jnv`xJ@{Sxϝvmʭe}ٴ}Q n[u9sUoڙvGkϲixq:;dr>BMy*)Yٕvk$SfفlгcRh @*{t: ǗA:ð͖;74V2|hp$Q_0=X-B0 Ux#>My$FRNxI\M#HS`|2R`&̑tld"c ^-GG6R?FZ3.Y Y_`hr>[9G]`d854^c 

Wincap设置过滤器,该如何解决
Wincap设置过滤器,该如何解决

Wincap设置过滤器,该如何解决
我按照Wincap官方的例子,设置我的抓包程序的过滤器.
BOOL CapturePacket::SetFilter(char * packet_filter)//设置过滤器{if (pcap_compile(adhandle,&fcode,packet_filter,1,netmask) <0 )//设置过滤器{AfxMessageBox(Unable to compil e the packet filter.Check the syntax.);
TRACE(Error reading the packets:%s\n,pcap_geterr(adhandle));//语法错误,&fcode为0
/* 释放设备列表 */
pcap_freealldevs(alldevs);//return -1;}if (pcap_setfilter(adhandle,&fcode)<0)//设置过滤器{AfxMessageBox(Error setting the filter.);
/* 释放设备列表 */
pcap_freealldevs(alldevs);return -1;}// pcap_loop(adhandle,0,packet_handler,NULL);return 0;}pcap_compile函数执行返回小于0的数,就是没设置成功.于是我调试发现是&fcode为0.
就是开始定义struct bpf_program fcode;
然后pcap_compile,pcap_setfilter的参数调用啊!没其他地方调用,我问别人说,这个值要有值才行.
在pcap_compile(adhandle,&fcode,packet_filter,1,netmask)中,fcode的使用方式
基本上就是 :struct bpf_program fcode;然后传给这个接口就好了,这个参数的值是由pcap_compile来写的
我觉得之所以返回值小于0,你可能需要检查:
(1)adhandle,这个是一个网卡;
(2)packet_filter是不是符合winpcap的语法规则
(3)netmask是否正确,拿不准的话可以用0xffffff
希望对你有用
------解决方案--------------------------------------------------------
int pcap_setfilter ( pcap_t * p,
struct bpf_program * fp)Associate a filter to a capture.
pcap_setfilter() is used to specify a filter program.fp is a pointer to a bpf_program struct,usually the result of a call to pcap_compile().-1 is returned on failure,in which case pcap_geterr() may be used to display the error text; 0 is returned on success.
------解决方案--------------------------------------------------------
应该肯定不是fcode的问题你看看是不是掩码没有设置正确