在Linux中打开RAW套接字而不是超级用户

Pao*_*o M 2 c c++ sockets linux

我必须写一个ping函数才能在Linux上运行.语言是C++,所以C也可以.

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

icmp_sock = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP);
Run Code Online (Sandbox Code Playgroud)

如果我在没有超级用户的情况下运行我的应用程序,则该socket函数返回,-1即套接字未成功创建.如果我以超级用户身份运行它,一切正常.

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

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

Win*_*ute 6

pingcap_net_raw没有(其他)超级用户权限需要具备此功能的能力,您的程序也是如此.跑

setcap cap_net_raw+ep your_executable_file
Run Code Online (Sandbox Code Playgroud)

以root身份,然后普通用户就可以使用该程序.