用 libnetfilter_queue 获得数据包, libtins 操作数据包,放回 netfilter 时出现问题:
vector<uint8_t> vec = pkt.serialize();
nfq_set_verdict(qh, id, NF_ACCEPT, size, &vec[0]);
上面这样,(据我测试)只有长度 135 字节以上的数据包才能成功放回,而这样:
uint8_t arr[MAX_BUFSIZ];
copy(vec.begin(), vec.end(), arr);
nfq_set_verdict(qh, id, NF_ACCEPT, size, arr);
就完全没问题。
为什么呢?&vec[0] 和 arr 的地址有什么区别么?
按理说 vector 也是一段连续内存,应该一样的啊。求解,多谢!
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.