При попытке найти лучший метод для ping (ICMP) что-то из python, я столкнулся с этими вопросами:
- Как я могу выполнить ping или traceroute в python, получая доступ к выходу по мере его создания?
- ping сайт в python
- Как выполнить пинг или трассировку с помощью собственного питона?
Ответы обычно сводятся к "использованию этого стороннего модуля с привилегиями root" или "используйте команду ping системы и проанализируйте вывод". Из собственных методов icmplib и M. Cowles и J. Diemer ping.py прямо указывают на необходимость привилегий root, а также scapy руководство.
Таким образом, с этого фронта, отправка ICMP-сообщений без особых привилегий представляется невозможной. Команда ping системы как-то справляется, но ее справочная страница не проливает свет на то, как. С другой стороны, man-страница для icmp, возможно, говорит:
Non-privileged ICMP ICMP sockets can be opened with the SOCK_DGRAM socket type without requiring root privileges. The synopsis is the following: socket(AF_INET, SOCK_DGRAM, IPPROTO_ICMP) Datagram oriented ICMP sockets offer a subset of the functionality avail- able to raw ICMP sockets. Only IMCP request messages of the following types can be sent: ICMP_ECHO, ICMP_TSTAMP or ICMP_MASKREQ.
Таким образом, казалось бы, что, по крайней мере, согласно icmp, это разрешено. Итак, почему все инструменты python не могут это сделать? Являются ли инструменты python слишком общими и ожидаем, что любая работа над привилегированными сокетами будет привилегированной? Можно ли написать функцию ping в C, которая может ping без привилегий root, и расширять python этим? Кто-нибудь сделал это? Я просто неправильно понял проблему?