救命啊!!!winpcap总能抓到重复的包,怎么回事?
最近在写一个抓ie包的程序
贴部分代码如下:
while((!STOPFLAG)&&((res = pcap_next_ex( adhandle, &header, &pkt_data)) >= 0))
{
if(header->len>0)
{
/* 找到IP头的位置 */
ih = (ip_header *) (pkt_data +
14); //14为以太头的长度
/* 找到TCP头的位置 */
ip_len = (ih->ver_ihl & 0xf) * 4;
th = (tcp_header *) ((u_char*)ih + ip_len);
//数据的真正起点
data=(u_char*)ih + ip_len+20;
if (_mbsstr(data,care)) //const u_char care[]="7b2c50";
{
nPacketNum++;
strPacketNum.Format("%d",nPacketNum);
pcap_dump((unsigned char *)dumpfile, header, pkt_data);
wndDlg.SetWindowText(strPacketNum);
}
}
}
其中STOPFLAG是结束这个线程的标志。
遇到这样一个问题,如果单独使用pcap_dump函数,不进行字符串判断,也就是所有包都接收的话,那么每个包只收一次。
可按照代码中的写法,不但绝大多数情况下会收到完全重复的包(甚至连时间戳都不变,而且重复数量不定),而且还能收到一些不满足(_mbsstr(data,care))条件的包。
达人们伸出援手啊,小弟拜谢先。