Bei dem Versuch, die beste Methode, um herauszufinden, Ping (ICMP) etwas von Python, stieß ich auf diesen Fragen:Python nicht-privilegierter 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?
Die Antworten laufen im Allgemeinen darauf hinaus, "dieses Drittanbietermodul mit Root-Rechten zu verwenden" oder "den Ping-Befehl des Systems zu verwenden und die Ausgabe zu analysieren". Von den systemeigenen Methoden erwähnen icmplib und M. Cowles and J. Diemer's ping.py explizit die Notwendigkeit für root-Berechtigungen, ebenso wie die scapymanual.
Von daher scheint das native Senden von ICMP-Pings ohne spezielle Berechtigungen unmöglich. Der System-Ping-Befehl funktioniert zwar irgendwie, aber seine Manpage wirft kein Licht darauf. Die man page for icmp, auf der anderen Seite scheint zu sagen, dass es möglich ist:
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.
So wäre es das scheint, zumindest nach icmp, ist es erlaubt. Warum können all die Python-Tools das nicht? Sind die Python-Tools zu allgemein und erwarten Sie, dass alle Arbeiten an privilegierten Sockets privilegiert sind? Wäre es möglich, eine Ping-Funktion in C zu schreiben, die ohne root-Rechte pingen kann, und python damit zu erweitern? Hat jemand das getan? Habe ich das Problem einfach missverstanden?
Welches Betriebssystem verwenden Sie? [Aktuelle Linux-Kernel] (https://lkml.org/lkml/2011/5/10/389) und Mac OS X-Versionen haben bekanntermaßen nicht-privilegierte ICMP-Sockets. Die Manpage, die du gefunden hast, stammt von OS X und sollte funktionieren. Ich war erfolgreich mit einem nicht-privilegierten Python [Ping-Programm] (https://github.com/lilydjwg/winterpy/blob/master/pylib/icmplib.py), das unter Linux funktioniert (mit einer Änderung der Kernel-Einstellungen) aber möglicherweise einige Anpassungen auf OS X. – lilydjwg
Für Linuix, siehe hier http://StackOverflow.com/Questions/8290046/ICMP-Sockets-Linux/20105379#20105379, benötigen Sie eine spezielle sysctl, um in der Lage zu sein, Socket zu verwenden (AF_INET, SOCK_DGRAM, IPPROTO_ICMP) ' – nos