gpt4 book ai didi

c++ - libpcap 中数据包的 vector

转载 作者:行者123 更新时间:2023-11-28 01:02:37 28 4
gpt4 key购买 nike

我在 c/c++ 中使用 libpcap,在 vector 中插入指针时遇到问题。这是我的代码:

    typedef vector <u_char *>vPack;
...
vPack vect;
...
if (pcap_dispatch (p, 0, &mycallback, (u_char *) &vect) < 0){
cout << "Error" << endl;
pcap_perror (p, prestr);
}
....
void mycallback (u_char * args, const struct pcap_pkthdr *pkthdr, const u_char * packet){
u_char *pk;
pk = (u_char *)packet;
vPack *vec = (vPack *) args;
vec[0].push_back(pk);
}

问题是元素被插入到相同的内存位置,并且 vector 总是包含相同的元素。有什么建议吗?

PD:对不起我的英语。

最佳答案

mycallback 中,参数 packet 是一个 const u_char - 缓冲区。这个指针指向一个 libpcap-internal 数据缓冲区,它被每个与你的过滤器匹配的数据包重用(并且你的回调被调用)。您必须创建自己的缓冲区并将数据包数据复制到其中。

例如:

u_char *b = malloc(pkthdr->caplen);
memcpy(b, pk, pkthdr->caplen);
vec[0].push_back(b);

关于c++ - libpcap 中数据包的 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7994083/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com