gpt4 book ai didi

c - Linux 原始套接字权限问题

转载 作者:可可西里 更新时间:2023-11-01 11:48:27 26 4
gpt4 key购买 nike

我正在 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 中没有空格字符

关于c - Linux 原始套接字权限问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46466543/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com