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
привилегии...
самый безопасный и менее сложный способ, который я знаю, это:
-
сделайте личную копию двоичного файла python:
$ sudo cp / usr/bin / python2.7 ~/python_netraw
-
собственные это:
$ sudo chown
your user name
~/python_netraw -
не позволяйте никому другому управлять им:
$ chmod-x, u+x ~/python_netraw
-
дать ему возможность cap_net_raw:
$ sudo setcap cap_net_raw=eip/usr/bin / python_netraw
-
запустите scapy с ним:
$ ~ / python_netraw-O / usr / bin / scapy
(или использовать sudo
каждый раз, когда вам нужно запустить Scapy с правами сырья.)