Linux 具有通过映射内核和用户之间的共享缓冲区来有效捕获网络数据包的功能。我正在尝试以不需要root访问的方式使用此接口(因为我没有此权限)。
通常,packet_mmap用于直接查看网络上所有需要根访问权限的数据包。我的应用程序仅需要使用标准的linux UDP套接字接口。我希望仅使用packet_mmap来提高效率-现在,系统调用占用了我50%以上的CPU周期。
有没有一种方法可以配置packet_mmap以便可以从用户空间使用它?
查看Linux内核Git存储库,似乎PF_INET
套接字和PF_INET6
套接字都不支持内存映射访问,因此如果通过
我的应用程序仅需要使用标准的linux UDP套接字接口。我希望仅使用packet_mmap来提高效率-现在,系统调用占用了我50%以上的CPU周期。
您的意思是您想对普通的UDP或TCP套接字使用内存映射访问,但是,您不能这样做。原始IP套接字也是如此。
PF_PACKET
套接字确实支持内存映射访问,但是无论您是否使用内存映射访问,它们都需要提升的特权。他们不进行更换PF_INET
或PF_INET6
插座; 它们是一种用于读取和写入链路层数据包的机制,因此,如果要在它们上面运行普通的Internet应用程序,祝您好运:
而且您真的不想尝试这样做。
(请注意,“高级特权”不一定表示“ root特权”;CAP_NET_RAW
特权应该足够。但是,正如我所指出的,如果您要替换常规的套接字访问权限,则不想使用PF_PACKET
套接字。)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句