winpcap 抓包 速度
psc88 2008-08-22 04:09:52 我写了个winpcap抓包测试程序,用的是winpcap3.1版本,当2000个/秒的时候就开始丢包,机器性能不错的,cpu占用不多的。不知道是什么原因,请帮忙看看,谢谢!
void packet_handler(u_char *param,
const struct pcap_pkthdr *header,
const u_char *pkt_data);
FILE* g_fData = 0;
int main(int argc, char* argv[])
{
pcap_if_t *alldevs;
pcap_if_t *d;
int i=0;
char errbuf[PCAP_ERRBUF_SIZE];
pcap_t *adhandle;
if (pcap_findalldevs(&alldevs, errbuf) == -1)
{
fprintf(stderr,"Error in pcap_findalldevs: %s\n", errbuf);
exit(1);
}
for(d=alldevs;d;d=d->next)
{
printf("%d\t", ++i);
}
if(i==0)
{
printf("\nNo interfaces found! Make sure WinPcap is installed.\n");
return 0;
}
d=alldevs;
if ( (adhandle= pcap_open_live(d->name, 65536, 1, 1000, errbuf) ) == NULL)
{
fprintf(stderr,"\nUnable to open the adapter. %s is not supported by WinPcap\n");
pcap_freealldevs(alldevs);
return -1;
}
bpf_u_int32 NetMask;
struct bpf_program fcode;
char filter_app[] ="udp port 1111";//
if(d->addresses != NULL)
{
NetMask =((struct sockaddr_in *)(d->addresses->netmask))->sin_addr.S_un.S_addr;
}else
{
NetMask = 0xffffff;
}
if(pcap_compile(adhandle,&fcode,filter_app,1,NetMask)<0)
{
return 0;
}
if(pcap_setfilter(adhandle,&fcode)<0)
{
return 0;
}
printf("\nlistening on %s...\n", d->description);
pcap_freealldevs(alldevs);
pcap_loop(adhandle, 0, packet_handler, NULL);
return 0;
}
int icount = 0;
int iPackLen = 0;
void packet_handler(u_char *param, const struct pcap_pkthdr *header,const u_char *pkt_data)
{
iPackLen = header->len - 42;
++ icount;
printf("[%ld] [%ld]\n", icount,iPackLen);
}