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

запуск scapy как root решил проблему. Но я не этого хотел. Это потому, что обычный пользователь не может создать сырой сокет? Если да, то есть ли решение?

2 ответов


Scapy нужны привилегии root для создания необработанных сокетов, потому что он использует библиотеку сокетов Python. Необработанные сокеты могут использоваться только "с эффективным идентификатором пользователя 0 или возможностью CAP_NET_RAW" в соответствии с Linux raw man страницы.

Я не могу найти то, что выглядит достоверной документации о назначении CAP_NET_RAW возможность, но если вы ищете работу вокруг запуска скриптов Scapy, которые пользователь raw сокеты без root, это то, что вам нужно делать.


для запуска Scapy с помощью just cap_net_raw привилегии...

самый безопасный и менее сложный способ, который я знаю, это:

  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

(или использовать sudo каждый раз, когда вам нужно запустить Scapy с правами сырья.)