通常、私が開発しているアプリケーションには、ネットワーク内のさまざまなデバイスのネットワークステータスインジケータが含まれているのが好きです。これらのデバイスを監視する最も簡単な方法はpingを実行することです。ただし、rawソケットのセキュリティ要件またはping
。
私が監視するほとんどのデバイスは、最小限のネットワーク機能を備えた組み込みデバイスなので(常にICMPエコーを含む)するこの契約は必ず遵守する必要があります。エコプロトコル(マークが以下のコメントで指摘してくれましたね。ありがとうございます!) 普段は使えません。
ルート以外のアプリケーションにオーバーヘッドの低いICMP pingサービスを提供できる既存のサービスはありますか?
私はrootとして実行され、root以外のアプリケーションがそれに接続し、監視するデバイスを追加し、ping時間とネットワーク状態を照会できるようにするサービスを作成しようとしています。しかし、これを作り直したくありません。ホイール、それがすでに存在しているかどうかを知りたいです。
答え1
あなたの質問に対する答えはおそらく「いいえ、ありません」です。
その理由は、ICMPが低レベルのプロトコルであり、ICMPトラフィックを生成するためにアプリケーションがネットワークインターフェイスへの特権アクセスを必要とするためです。 ICMPを生成するバイナリはset-uidルートであるため、ほとんどのシステムでこれを確認できます。粘着性のある部分に注意してください。
$ ls -l /sbin/ping /usr/sbin/traceroute
-r-sr-xr-x 1 root wheel 28088 Aug 12 12:19 /sbin/ping
-r-sr-xr-x 1 root wheel 28608 Aug 12 12:20 /usr/sbin/traceroute
(これはFreeBSDで行われました。結果は他のオペレーティングシステムによって異なります。)
アプリケーションがネイティブネットワークトラフィックを生成するには、rootとして実行する必要があります。/sbin/ping
すでにrootとして実行されているので、最善の選択肢はこれを使用してpingを作成することです。
多数のホストでこれを行う場合は、次の点を検討することをお勧めします。平らな。別のオプションはTCPing、TCPパケットを生成して、ICMP pingと同様の結果を提供できます。要件は、パケットを受信するためにターゲットシステムに開いているポートが必要であることです。この方法を使用しても、ソースに応じてコピーしてもかまいません。どちらもすでにオペレーティングシステム用のパッケージとして提供できます。
大規模なモニタリングソリューションでは、ナギオスそしてザビクス人気の無料オプションですが、他のオプションもたくさんあります。
答え2
必要なものと比較してあまりにも高価に見えるかもしれませんが、ほとんどの成熟したモニタリングソリューション(Nagios、icinga、またはcheck_mkなど)はicmpモニタリングを提供し、一般的にクエリできるAPIを提供します。
答え3
ICMPエコーは肯定的な応答であるため良いですが、リモートコンピュータでこれらのテストを提供する場合は、システムアクティビティテストに否定的な応答(ポート接続不可やプロトコル接続不可)を使用できます。努力する:
connect()
未使用のTCPポートへのアクセスsend()
未使用UDPポートへの接続
setsockopt(fd, IP_RECVERR, ...)
エラーを完全に回復するには、次のことができる必要があり、エラー自体を受け取るには特別なオプションを使用できる必要があります。 (Linuxではマニュアルページを参照してくださいip(7)
。)
答え4
ping
この古い質問に対する更新された回答により、2019年以来、root権限なしで要求を実行できるLinuxベースのプラットフォームでユーザーレベルのアプリケーションを作成することが可能になりました。
ls -l /bin/ping
-rwxr-xr-x 1 root root 55720 Mar 8 2021 /bin/ping
ping -c1 google.co.uk
PING google.co.uk(lhr48s27-in-x03.1e100.net (2a00:1450:4009:815::2003)) 56 data bytes
64 bytes from lhr35s11-in-x03.1e100.net (2a00:1450:4009:815::2003): icmp_seq=1 ttl=119 time=13.0 ms
--- google.co.uk ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 13.047/13.047/13.047/0.000 ms
setuidと機能なしでFedoraでPingをどのように機能しますか?
Linuxカーネルのnet.ipv4.ping_group_range
sysctlパラメーターは、ping
追加の権限や機能なしでパケットを送受信できるユーザーグループの数値範囲を定義します。