我正在创建一个原始的以太网套接字在C应用程序中,例如:
并且返回-1表示错误。
我相信这是一个权限问题 - 只有UID为0(root)或具有
我认为以root身份运行应用程序是不合理的,因此我的问题是如何将
来自http://manpages.ubuntu.com/manpages/zesty/en/man7/packet.7.html。
但是如何实现这个目标呢?
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.
但是如何实现这个目标呢?
seteuid()
放弃这些root权限是可能的。 - JFMR