雖然試圖找出最好的方法來ping從蟒蛇(ICMP)的東西,我碰到這樣的問題:蟒蛇非特權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?
答案通常歸結爲「以root權限使用此第三方模塊」或「使用系統的ping命令並解析輸出」。在本地方法中,icmplib和M. Cowles and J. Diemer's ping.py明確提到了對root權限的需求,如同scapymanual。
所以從這方面來看,本地發送無特殊權限的ICMP ping似乎是不可能的。系統ping命令確實以某種方式管理,但其手冊頁並未闡明如何實現。該man page for 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工具是否過於普遍,並期望在特權套接字上的任何工作都有特權?是否有可能在C中編寫一個ping功能,可以在沒有root權限的情況下進行ping操作,並用此擴展python?有沒有人做過這個?我剛剛誤解了這個問題嗎?
您使用的是什麼操作系統? [最近的Linux內核](https://lkml.org/lkml/2011/5/10/389)和Mac OS X中已知有非特權ICMP套接字。您找到的手冊頁來自OS X,它應該可以工作。我成功地使用了一個非特權的純Python [ping程序](https://github.com/lilydjwg/winterpy/blob/master/pylib/icmplib.py),它在Linux上工作(對內核設置進行更改)但可能需要對OS X進行一些調整。 – lilydjwg 2013-10-27 10:03:30
對於Linuix,請參閱http://stackoverflow.com/questions/8290046/icmp-sockets-linux/20105379#20105379,您需要一個特殊的sysctl才能夠使用`socket( AF_INET,SOCK_DGRAM,IPPROTO_ICMP)` – nos 2013-11-20 19:57:29