Deepseek 如是说:
这个错误表明您的用户账户没有权限创建原始套接字(raw socket),而 ping
命令需要该权限来发送 ICMP 请求。以下是几种解决方案:
方法 1:使用 sudo
(临时提升权限)
直接使用 sudo
运行 ping 命令:
bash
sudo ping www.baidu.com
输入密码后即可执行。但每次都需要 sudo
。
方法 2:为 ping
命令设置 CAP_NET_RAW
能力(持久化配置)
-
为
ping
二进制文件赋予CAP_NET_RAW
能力:
bashsudo setcap cap_net_raw+ep /bin/ping
-
之后普通用户即可直接使用
ping
:
bashping www.baidu.com
方法 3:检查 ping
文件的权限
确保 /bin/ping
具有 setuid
权限(部分系统默认配置):
bash
ls -l /bin/ping
如果输出中包含 rws
(如 -rwsr-xr-x
),则表示已配置。若未设置,可通过以下命令修复:
bash
sudo chmod u+s /bin/ping
方法 4:容器环境(如 Docker)的特殊处理
如果您在容器中遇到此问题,需在运行容器时添加 NET_RAW
能力:
bash
docker run --cap-add=NET_RAW your_image
或直接使用特权模式(不推荐,存在安全风险):
bash
docker run --privileged your_image
方法 5:用户组权限(部分系统)
某些系统(如 Debian)将用户加入 net-raw
组后可获得权限:
bash
sudo usermod -aG net-raw your_username
注销后重新登录生效。
原因说明
- Linux 系统要求进程具有
CAP_NET_RAW
能力或setuid
权限才能创建原始套接字。 - 普通用户默认无此权限,需通过上述方法配置。
旧主机自带原网卡非常卡,怀疑故障,插接了一个USB网卡,使用双网卡ping百度出现以下提示:
BenJoe@BenJoe-PC:~$ ping www.baidu.com
ping: socktype: SOCK_RAW
ping: socket: 不允许的操作
ping: => missing cap_net_raw+p capability or setuid?
后无论是只开一个网卡还是开两个网卡,均是这个状态。
问题供参考,希望能改善对网卡的识别,此外求一个类似win的设备管理器查看的工具,两个网卡名称 一个是网络连接1,一个是网络连接2,无法直接分辨那个是原网卡,哪个是USB网卡。