Al tratar de averiguar el mejor método para hacer ping a algo (ICMP) de pitón, me encontré con estas preguntas:pitón no privilegiado ICMP
- How can I perform a ping or traceroute in python, accessing the output as it is produced?
- ping a site in python
- How can I perform a ping or traceroute using native python?
Las respuestas generalmente se reducen a "usar este módulo de terceros con privilegios de raíz" o "usar el comando de ping del sistema y analizar el resultado". De los métodos nativos, icmplib y M. Cowles and J. Diemer's ping.py mencionan explícitamente la necesidad de privilegios de root, al igual que el scapymanual.
Así que desde ese frente, el envío nativo de ping ICMP sin privilegios especiales parece imposible. El comando system ping funciona de alguna manera, pero su página man no arroja ninguna luz sobre cómo. El man page for icmp, por el contrario, parece que decir que es posible:
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.
por lo que parece que, al menos según la ICMP, está permitido. Entonces, ¿por qué todas las herramientas de Python no pueden hacer esto? ¿Las herramientas de python son demasiado generales y se espera que se privilegie el trabajo en zócalos privilegiados? ¿Sería posible escribir una función de ping en C que pueda hacer ping sin privilegios de root y extender python con esto? ¿Alguien ha hecho esto? ¿Acabo de malinterpretar el problema?
¿Qué sistema operativo está utilizando? [Núcleos recientes de Linux] (https://lkml.org/lkml/2011/5/10/389) y Mac OS X son conocidos por tener sockets ICMP no privilegiados. La página de manual que ha encontrado es de OS X y debería funcionar. He tenido éxito con un Python [ping program] sin privilegios (https://github.com/lilydjwg/winterpy/blob/master/pylib/icmplib.py) que funciona en Linux (con un cambio de configuración de kernel) pero puede necesitar algunos ajustes en OS X. – lilydjwg
Para Linuix, consulte aquí http://stackoverflow.com/questions/8290046/icmp-sockets-linux/20105379#20105379, necesita un sysctl especial para poder usar 'socket (AF_INET, SOCK_DGRAM, IPPROTO_ICMP) ' – nos