scapy:发送数据包时不允许操作

时间:2014-03-15 08:07:59

标签: scapy

我正在尝试用scapy学习一些数据包生成。它看起来很酷。根据一些文档,我正在这样做:

l3=IP(dst="192.168.0.1", src="192.168.0.2", tos=(46 << 2))

但只是为了得到以下错误信息:

Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/usr/lib/python2.7/dist-packages/scapy/sendrecv.py", line 251, in send
    __gen_send(conf.L3socket(*args, **kargs), x, inter=inter, loop=loop, count=count,verbose=verbose, realtime=realtime)
  File "/usr/lib/python2.7/dist-packages/scapy/arch/linux.py", line 307, in __init__
    self.ins = socket.socket(socket.AF_PACKET, socket.SOCK_RAW, socket.htons(type))
  File "/usr/lib/python2.7/socket.py", line 187, in __init__
    _sock = _realsocket(family, type, proto)
error: [Errno 1] Operation not permitted

以root身份运行scapy解决了这个问题。但这不是我想要的。是因为普通用户无法创建RAW套接字吗?如果有,是否有解决方案?

3 个答案:

答案 0 :(得分:8)

Scapy需要root权限才能创建原始套接字,因为它使用Python套接字库。原始套接字仅允许使用&#34;有效用户ID为0或CAP_NET_RAW功能&#34;根据{{​​3}}

我无法找到关于设置CAP_NET_RAW功能的可靠文档,但是如果您正在寻找一个解决方案来运行没有root用户原始套接字的Scapy脚本,那就是你需要做的。

答案 1 :(得分:6)

使用cap_net_raw权限运行Scapy ...

我所知道的最安全,最简单的方法是:

  1. 制作python二进制文件的个人副本:

    $ sudo cp /usr/bin/python2.7~/ python_netraw

  2. 拥有它:

    $ sudo chown your user name〜/ python_netraw

  3. 不要让其他人运行它:

    $ chmod -x,u + x~ / python_netraw

  4. 给它cap_net_raw功能:

    $ sudo setcap cap_net_raw = eip / usr / bin / python_netraw

  5. 用它运行scapy:

    $〜/ python_netraw -O / usr / bin / scapy

  6. (或者每次需要使用原始权限运行Scapy时使用sudo。)

答案 2 :(得分:0)

要使用 cap_net_raw 运行临时的 python 环境(如 scapy),我发现这有效:

sudo -E capsh --caps="cap_setpcap,cap_setuid,cap_setgid+ep cap_net_raw+eip" --keep=1 --user="$USER" --addamb="cap_net_raw" -- -c /usr/bin/python3

改编自Arch Wiki