使用WINPCAP时使用pcap_loop()出错
凄凄迷人 2009-06-02 09:15:59
使用VISUAL STUDIO6.0开写一个小的SNIFFER,用WINPCAP的函数
获取驱动列表及打开网卡都可以。但是执行到pcap_loop的时候(
用pcap_dispatch()也一样)出现
First-chance exception in mysniffer.exe (KERNEL32.DLL): 0xC0000005: Access Violation.
这种错误。
网上看过出现的情况都是调用pcap_findalldevs的时候出这个错误。不知道咋回事。
代码如下:
// 监听结果处理
void dispatcher_handler(u_char *temp1, const pcap_pkthdr *header, const u_char *pkt_data)
{
ResultPacket packet;
ip_header *ih;
udp_header *uh;
u_int ip_len;
u_short sport, dport;
ih = (ip_header *)(pkt_data + 14);
ip_len = (ih->ver_ihl & 0xf) * 4;
uh = (udp_header *)((u_char*)ih + ip_len);
sport = uh->sport;
dport = uh->dport;
CString sip_str,sport_str,dip_str,dport_str,proto_str;
sip_str.Format("%s.%s.%s.%s", ih->saddr.byte1, ih->saddr.byte2, ih->saddr.byte3, ih->saddr.byte4);
dip_str.Format("%s.%s.%s.%s", ih->daddr.byte1, ih->daddr.byte2, ih->daddr.byte3, ih->daddr.byte4);
sport_str.Format("%d", sport);
dport_str.Format("%d", dport);
proto_str.Format("%s", ih->proto);
packet.m_sip = sip_str;
packet.m_sport = sport_str;
packet.m_dip = dip_str;
packet.m_dport = dport_str;
packet.m_content = _T("teststr");
CMainFrame *frame = (CMainFrame*)(AfxGetApp()->GetMainWnd());
frame->m_dlgResult.AddItem(packet); //显示结果
}
// 监听函数
UINT do_listen(LPVOID pparam)
{
CMainFrame *frame = (CMainFrame*)(AfxGetApp()->GetMainWnd());
//执行到此处出错。进不去这个函数
pcap_loop(frame->ahandle, 0, dispatcher_handler, NULL);
return 0;
}