首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在内核空间中写入数据包

问如何在内核空间中写入数据包
EN

Stack Overflow用户
提问于 2012-04-03 00:38:29
回答 1查看 547关注 0票数 1

我正在使用netfilter过滤数据包。现在,我需要将这些包数据放入文件中。我知道我们不能直接从内核读/写文件(感染,我们不应该),但最近我知道我们可以使用拼接来做到这一点。

以前,我尝试将所有数据包复制到用户空间,然后将它们转储到一个文件中,但它的操作非常慢,并且我丢失了数据包。我尝试使用netlink,也尝试使用标准的udp套接字从内核空间复制到用户空间。我使用这种方法没有得到好的结果,因为我有非常高的数据包率。

请给我推荐一种在内核空间内将数据包写入文件的好方法。如果任何人有使用拼接的想法/例子,将不胜感激。thnx。

EN

回答 1

Stack Overflow用户

发布于 2013-10-04 04:36:01

您是否尝试过使用原始套接字提升套接字的优先级?当需要更快的套接字操作时,这通常会起到作用。我仍然觉得从内核空间写入文件不是一个好主意,特别是当你必须将数据包数据转储到文件中的时候。

如果您认为,copy_to_user延迟是导致延迟的原因(理想情况下不应如此,但在极端情况下,是的)尝试从内核分配一块内存并将其映射到用户空间。并从这个池中进行skbuff分配。然后,做常规的插座或网链到门铃。然后,您可以从用户空间直接从该区域访问数据包。这是一些工作,但在极端条件下应该会有所帮助。

但是,如果你想这样做,这里有一篇很好的文章-- http://www.linuxjournal.com/node/8110/print

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9980276

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档