libpcap抓包有重复包

lhmht 2014-04-03 03:57:03
哪位牛人帮忙看下哪里有问题,为什么我用libpcap函数抓包会有重复包呢?(重复的包在包的结尾)
while(flag)
{
if (nIndex == 0||time(&endtime)-rawtime==sec){
nIndex = 1;
if (p)
pcap_dump_close(p);
time(&rawtime);
char timE[100];
sprintf(timE,"%ld",rawtime);
//time(&rawtime);
//timeinfo = localtime(&rawtime);
//size_t len = strftime(timE,15,"%Y%m%d%k%M%S\n",timeinfo);
string tmp1 = GetIniKeyString("COMMON","ProbeID","pro.ini");
string tmp2 = GetIniKeyString("COMMON","DeviceID","pro.ini");
string filename = "HB_ALL_" + tmp1 +"_" + tmp2 + "_" + timE + ".pcap";
filename = tmp3 + filename;
cout<<"filename=="<<filename<<endl;
system(buffer);
p = pcap_dump_open(handle, filename.c_str());
if(p == NULL)
{
printf("Error:%s\n","pcap_dump_open");
return -1;
}
}

struct pcap_pkthdr *phdr = NULL;
pcap_next_ex(handle,&phdr,&packet);
if(phdr->len == 0)
continue;
pcap_dump((u_char *)p,phdr,packet);
}
...全文
152 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
lhmht 2014-04-04
  • 打赏
  • 举报
回复
pcap_next_ex(pcap_t* p,struct pcap_pkthdr** pkt_header,const u_char** pkt_data) 功能: 从interface或离线记录文件获取一个报文 参数: p: 已打开的捕捉实例的描述符 pkt_header: 报文头 pkt_data: 报文内容 返回值: 1: 成功 0: 获取报文超时 -1: 发生错误 -2: 获取到离线记录文件的最后一个报文 pkt_data则是我们需要的报文内容,通过试验,在调用pcap_next_ex()之后系统会分配一部分内存(大概有500KB左右)供其使用,返回的报文内容则存放在这部分内存中,不过这只是暂存,不可能将大量的数据内容放在这一部分内存中的;通过调试可以看到,pcap_next_ex()将返回的报文内容线型的存储在这一部分内存中,当数据量占满了这部分内存后,会充开始位置覆盖原有数据,所以需要保存报文内容需要写入本地文件或另外开辟内存空间存储!

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧