我正在使用netfilter过滤数据包。现在,我需要将这些包数据放入文件中。我知道我们不能直接从内核读/写文件(感染,我们不应该),但最近我知道我们可以使用拼接来做到这一点。
以前,我尝试将所有数据包复制到用户空间,然后将它们转储到一个文件中,但它的操作非常慢,并且我丢失了数据包。我尝试使用netlink,也尝试使用标准的udp套接字从内核空间复制到用户空间。我使用这种方法没有得到好的结果,因为我有非常高的数据包率。
请给我推荐一种在内核空间内将数据包写入文件的好方法。如果任何人有使用拼接的想法/例子,将不胜感激。thnx。
发布于 2013-10-04 04:36:01
您是否尝试过使用原始套接字提升套接字的优先级?当需要更快的套接字操作时,这通常会起到作用。我仍然觉得从内核空间写入文件不是一个好主意,特别是当你必须将数据包数据转储到文件中的时候。
如果您认为,copy_to_user延迟是导致延迟的原因(理想情况下不应如此,但在极端情况下,是的)尝试从内核分配一块内存并将其映射到用户空间。并从这个池中进行skbuff分配。然后,做常规的插座或网链到门铃。然后,您可以从用户空间直接从该区域访问数据包。这是一些工作,但在极端条件下应该会有所帮助。
但是,如果你想这样做,这里有一篇很好的文章-- http://www.linuxjournal.com/node/8110/print
https://stackoverflow.com/questions/9980276
复制相似问题