Trong khi cố gắng tìm ra phương pháp tốt nhất để ping (ICMP) một cái gì đó từ trăn, tôi tình cờ gặp những câu hỏi này:trăn không có đặc quyền 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?
Các câu trả lời thường đun sôi xuống để "sử dụng mô-đun bên thứ ba này với quyền root" hoặc "sử dụng lệnh ping của hệ thống và phân tích đầu ra". Trong số các phương thức gốc, icmplib và M. Cowles and J. Diemer's ping.py đề cập rõ ràng nhu cầu về các đặc quyền gốc, cũng như scapymanual.
Vì vậy, từ mặt trước đó, việc gửi ping ICMP nguyên bản mà không có đặc quyền đặc biệt có vẻ là không thể. Lệnh ping hệ thống không quản lý bằng cách nào đó, nhưng trang người dùng của nó không làm sáng tỏ cách thực hiện. Các man page for icmp, mặt khác, dường như để nói nó có thể:
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.
Vì vậy, nó sẽ có vẻ rằng, ít nhất là theo icmp, nó cho phép. Vậy tại sao tất cả các công cụ python lại không thể thực hiện được điều này? Là các công cụ python quá chung chung và mong đợi bất kỳ công việc trên ổ cắm đặc quyền để được đặc quyền? Nó sẽ có thể viết một chức năng ping trong C có thể ping mà không có quyền root, và mở rộng python với điều này? Có ai đã làm điều này không? Tôi vừa hiểu nhầm vấn đề chưa?
Bạn đang sử dụng hệ điều hành nào? [Hạt nhân Linux gần đây] (https://lkml.org/lkml/2011/5/10/389) và Mac OS X được biết là có ổ cắm ICMP không có đặc quyền. Trang người dùng bạn tìm thấy là từ OS X và nó sẽ hoạt động. Tôi đã thành công với chương trình [ping program] không có đặc quyền (Python) (https://github.com/lilydjwg/winterpy/blob/master/pylib/icmplib.py) hoạt động trên Linux (với thay đổi cài đặt hạt nhân) nhưng có thể cần một số điều chỉnh trên OS X. – lilydjwg
Đối với Linuix, xem tại đây http://stackoverflow.com/questions/8290046/icmp-sockets-linux/20105379#20105379, bạn cần một sysctl đặc biệt để có thể sử dụng 'socket (AF_INET, SOCK_DGRAM, IPPROTO_ICMP) ' – nos