+-

我正在C应用程序中创建一个原始以太网套接字,例如
s = socket(AF_PACKET, SOCK_RAW, htons(ETH_P_ALL));
并返回-1表示错误
我很确定它是一个权限问题 – 如果您的UID为0(root)或具有CAP_NET_RAW功能,则只能打开原始套接字
我不认为以root身份运行应用程序是合理的,因此我的问题是如何将“CAP_NET_RAW”功能权限添加到我的用户帐户?
从http://manpages.ubuntu.com/manpages/zesty/en/man7/packet.7.html起
In order to create a packet socket, a process must have the CAP_NET_RAW
capability in the user namespace that governs its network namespace.
但是,如何实现这一目标呢?
最佳答案
您可以在需要该功能的可执行文件上设置功能,而不是用户帐户.语法是
setcap cap_net_raw,cap_net_admin=eip ./your_exeutable
(注意,你需要以root身份运行setcap,所以请使用例如sudo setcap …同时确保cap_net_raw中没有空格字符,cap_net_admin = eip
点击查看更多相关文章
转载注明原文:Linux Raw Socket权限问题 - 乐贴网