解决使用scapy库无法发包问题
使用了root用户还是提示没有权限:PermissionError: [Errno 1] Operation not permitted
原因:运行脚步是使用了root权限,但是如果python解释器没有执行原始套接字的访问权限和网络管理权限,就会出现上面的错误。
解决:使用 setcap
命令对实际的 Python 解释器设置权限:
sudo setcap cap_net_raw,cap_net_admin=eip xxxxxxx/scapy_env/bin/python3.11
“xxxxxxx/scapy_env/bin/python3.11”是python解释器实际的位置(readlink -f $(which python3)命令可以获取到)
setcap命令用于给指定的可执行文件(这里是Python解释器)设置特定的能力,使其在执行过程中具有指定的权限。
cap_net_raw和cap_net_admin是两个网络相关的能力,分别表示对原始套接字的访问权限和网络管理权限。
eip表示将这两个能力授予指定的可执行文件,即Python解释器。
移除特权:
sudo setcap -r xxxxxxx/scapy_env/bin/python3.11
查看是否移除了特权:
getcap xxxxxxx/scapy_env/bin/python3.11
查找可执行文件路径:
使用
which python3
可以快速找到python3
的路径,但可能是符号链接。如果路径是一个符号链接(symlink),它不会解析符号链接到实际文件。适合快速检查命令路径。
解析实际文件路径:
使用
readlink -f $(which python3)
可以找到python3
的实际文件路径,特别是当你需要对实际文件进行操作(如设置权限)时。适合需要实际文件路径的场景,如设置特权或进行其他需要实际路径的操作。