सबसे अच्छा तरीका यह पता लगाने की पिंग करने (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?
उत्तर आमतौर पर "रूट विशेषाधिकारों के साथ इस तीसरे पक्ष के मॉड्यूल का उपयोग" करने के लिए उबालते हैं या "सिस्टम के पिंग कमांड का उपयोग करते हैं और आउटपुट पार्स करते हैं"। मूल विधियों में से icmplib और M. Cowles and J. Diemer's ping.py स्पष्ट रूप से रूट विशेषाधिकारों की आवश्यकता का जिक्र करते हैं, जैसा scapymanual करता है।
तो उस मोर्चे से, विशेष रूप से विशेष विशेषाधिकारों के बिना आईसीएमपी पिंग भेजना असंभव लगता है। सिस्टम पिंग कमांड किसी भी तरह का प्रबंधन करता है, लेकिन इसका मैन पेज इस पर कोई प्रकाश नहीं डालता है।
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 के अनुसार, यह अनुमत है: man page for icmp, दूसरे हाथ पर, यह संभव है का कहना है कि लगता है। तो यह क्यों है कि सभी अजगर उपकरण ऐसा करने में असमर्थ हैं? क्या अजगर उपकरण बहुत सामान्य हैं और विशेषाधिकार प्राप्त सॉकेट पर किसी भी काम को विशेषाधिकार प्राप्त करने की उम्मीद है? क्या सी में एक पिंग फ़ंक्शन लिखना संभव होगा जो रूट विशेषाधिकारों के बिना पिंग कर सकता है, और इसके साथ अजगर का विस्तार कर सकता है? क्या किसी ने ऐसा किया है? क्या मैंने समस्या को गलत समझा है?
आप किस ऑपरेटिंग सिस्टम का उपयोग कर रहे हैं? [हालिया लिनक्स कर्नल] (https://lkml.org/lkml/2011/5/10/389) और मैक ओएस एक्स को गैर-विशेषाधिकार प्राप्त आईसीएमपी सॉकेट के रूप में जाना जाता है। आपके द्वारा प्राप्त किया गया मैन पेज ओएस एक्स से है, और इसे काम करना चाहिए। मैं एक गैर-विशेषाधिकार प्राप्त शुद्ध-पायथन [पिंग प्रोग्राम] (https://github.com/lilydjwg/winterpy/blob/master/pylib/icmplib.py) के साथ सफल हुआ है जो लिनक्स पर काम करता है (कर्नेल सेटिंग परिवर्तन के साथ) लेकिन ओएस एक्स – lilydjwg
पर कुछ समायोजन की आवश्यकता हो सकती है, लिनिक्स के लिए, यहां देखें http://stackoverflow.com/questions/8290046/icmp-sockets-linux/20105379#20105379, आपको सॉकेट का उपयोग करने में सक्षम होने के लिए एक विशेष sysctl की आवश्यकता है (AF_INET, SOCK_DGRAM, IPPROTO_ICMP) ' – nos