问题遇到的现象和发生背景
要编写一个用libpcap库抓包修改再发送的程序,打算在每次抓到包后用包处理函数,把包保存在Map中。
问题相关代码
下面是抓包的代码:
void Capture::run()
{
qDebug() << "thread init!";
while((res = pcap_next_ex(handle,&pcap_pkthdr,&packet_content)) > 0)
/* 注册回调函数,循环捕获数据包 /
{
qDebug()<<"thread is running";
packet_handler((u_char)NULL, pcap_pkthdr, packet_content);
}
}
然后是包处理函数的定义:
void Capture::packet_handler(u_char *user, const struct pcap_pkthdr *packethdr, const u_char *packetptr);
然后在包处理函数中用Ip层信息做Key,将包指针保存下来:
if(!pktmap.contains(ipInfo)){
pktmap.insert(ipInfo, packetptr);
}
运行结果及报错内容
为了验证是否可行,于是用从Map中读取下来的包指针再解析一遍包的内容,发现内容是最后一个包的信息,而不是我列表上选的条目对应的包,在调试窗口也发现,Map里的Key不同,但是Value一样,且都是最后一个包的内容。
调试:
我的解答思路和尝试过的方法
我感觉无从下手,正常解析就是用packetptr这个指针的内容解析,为什么保存到Map里就全都一样了
我想要达到的结果
希望大家可以帮我解答一下,感激不尽!