Python から何かを ping (ICMP) するための最良の方法を見つけようとしているときに、次の質問に出くわしました。
- Python で ping または traceroute を実行し、生成された出力にアクセスするにはどうすればよいですか?
- Python でサイトに ping を実行する
- ネイティブ python を使用して ping または traceroute を実行するにはどうすればよいですか?
答えは通常、「このサードパーティモジュールをルート権限で使用する」または「システムのpingコマンドを使用して出力を解析する」に要約されます。ネイティブ メソッドのうち、icmplibとM. Cowles と J. Diemer の ping.pyは、 scapy マニュアルと同様に、root 権限の必要性を明示的に述べています。
そのため、特別な権限なしで ICMP ping をネイティブに送信することは不可能に思えます。システムの ping コマンドは何とか管理できますが、そのマニュアル ページにはその方法が説明されていません。一方、 icmpのマニュアルページには、可能であると書かれているようです:
非特権 ICMP ICMP ソケットは、SOCK_DGRAM ソケット タイプを使用せずに開くことができます。 root 権限が必要です。あらすじは次のとおりです。 ソケット(AF_INET、SOCK_DGRAM、IPPROTO_ICMP) データグラム指向の ICMP ソケットは、利用可能な機能のサブセットを提供します。 ICMP ソケットを raw することができます。以下の IMCP 要求メッセージのみ 次のタイプを送信できます: ICMP_ECHO、ICMP_TSTAMP、または ICMP_MASKREQ。
したがって、少なくとも icmp によれば、許可されているように見えます。では、すべての python ツールがこれを実行できないのはなぜでしょうか? Python ツールは一般的すぎて、特権ソケットでの作業が特権を持つことを期待していますか? root権限なしでpingできるping関数をCで書いて、これでpythonを拡張することは可能でしょうか? 誰かがこれをしましたか?問題を誤解しただけですか?