You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:无需root/sudo权限运行Linux下Python网络抓包代码

解决Scapy抓包脚本无需sudo直接运行的问题

核心原因

Scapy捕获网络流量需要使用原始套接字,这类操作默认仅root用户有权限,普通用户直接运行会因权限不足失败。以下是两种可行的解决方案:


方法1:给Python二进制文件添加网络权限(推荐)

利用Linux的capabilities机制,给Python程序单独赋予抓包所需的权限,无需全局sudo:

  1. 先找到Python3.8的二进制文件路径:
which python3.8

通常输出为/usr/bin/python3.8

  1. 给该文件添加抓包必需的权限:
sudo setcap cap_net_raw,cap_net_admin+eip /usr/bin/python3.8
  • cap_net_raw:允许创建原始套接字,满足抓包基础需求
  • cap_net_admin:支持Scapy部分高级网络操作
  • +eip:让权限可以继承到Python的子进程
  1. 验证权限是否生效:
getcap /usr/bin/python3.8

正常输出应为:/usr/bin/python3.8 = cap_net_admin,cap_net_raw+eip

完成后直接执行python3 test.py即可正常抓包。


方法2:通过SUID包装脚本实现(不推荐,有安全风险)

若仅做临时测试,可通过shell脚本包装实现SUID权限,但该方式存在安全隐患,仅建议在受控环境使用:

  1. 创建一个shell包装脚本run_capture.sh:
#!/bin/bash
/usr/bin/python3.8 /绝对路径/test.py

替换/绝对路径/test.py为你的脚本实际路径

  1. 赋予脚本执行权限并设置SUID:
sudo chmod u+s run_capture.sh
sudo chmod +x run_capture.sh
  1. 直接运行包装脚本:
./run_capture.sh

⚠️ 注意:SUID脚本若被篡改,攻击者可获取root权限,生产环境禁止使用。


额外注意事项

  • 确保脚本中/path_to_capture目录对当前用户有写入权限,否则保存pcap文件会失败,可执行以下命令修改权限:
sudo chown $USER:$USER /path_to_capture
sudo chmod 755 /path_to_capture
  • 若后续Python版本更新,需要重新执行setcap命令给新的Python二进制文件添加权限。

内容的提问来源于stack exchange,提问作者AHSAN YAZDANI

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 22:25:42