首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在linux中打开原始套接字而不是超级用户

问在linux中打开原始套接字而不是超级用户
EN

Stack Overflow用户
提问于 2015-03-04 15:13:13
回答 2查看 3.8K关注 0票数 3

我必须编写ping函数才能在Linux上运行。语言是C++,所以C语言也不错。

在因特网上搜索并查看ping命令的源代码,结果是我应该创建一个原始套接字:

代码语言:javascript
复制
icmp_sock = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP);

如果我在没有超级用户的情况下运行我的应用程序,socket函数将返回-1,即没有成功创建套接字。如果我以超级用户的身份运行它,一切都很好。

现在,ping命令确实创建了一个原始套接字,我可以在没有超级用户权限的情况下运行它。

我的问题是:如何授予应用程序创建原始套接字所需的所有权限,而无需超级用户执行?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-04 15:21:22

ping需要在没有(其他)超级用户权限的情况下使用cap_net_raw功能,您的程序也需要这样做。跑

代码语言:javascript
复制
setcap cap_net_raw+ep your_executable_file

作为root用户,那么普通用户就可以使用该程序了。

票数 8
EN

Stack Overflow用户

发布于 2015-03-04 15:19:47

您可以使您的程序成为SUID命令,有效地授予它根权限,而不将它们授予正在执行的用户。有关示例和说明,请参见这里。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28857941

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档