ICMP エコー要求サービスはありますか?

ICMP エコー要求サービスはありますか?

私が開発するアプリケーションには、ネットワーク上のさまざまなデバイスのネットワーク ステータス インジケーターを組み込むことがよくあります。これらのデバイスを監視する最も簡単な方法は、デバイスに ping を実行することです。ただし、生のソケットのセキュリティ要件や、 へのシェルアウトに関するパフォーマンスの問題により、ICMP エコーをアプリケーションに統合することが難しいことがよくありますping。また、これが問題にならない状況では、さまざまな状況に合わせて同じ ping コードのわずかに異なるバリエーションを記述しすぎることがあります。

私が監視するデバイスのほとんどは、最小限のネットワーク機能(ただし、常にICMPエコーを含む)を備えた組み込みデバイスであるため、するこのプロトコルに従わなければならない、例えばエコープロトコル(下のコメントでマークが指摘してくれました、ありがとう!) 通常は私には利用できません。

非ルート アプリケーションに低オーバーヘッドの ICMP ping サービスを提供できる既存のサービスはありますか?

私は、ルートとして実行され、他の非ルートアプリケーションがそのサービスに接続し、監視するデバイスを追加し、ping 時間とネットワーク ステータスを照会できるようにするサービスを作成することを検討していますが、車輪の再発明はしたくないので、このようなサービスがすでに存在するかどうか疑問に思っています。

答え1

あなたの質問に対する答えはおそらく「いいえ、ありません」でしょう。

その理由は、ICMP が低レベルのプロトコルであり、ICMP トラフィックを生成するには、アプリケーションがネットワーク インターフェイスへの特権アクセスを必要とするためです。ほとんどのシステムでは、ICMP を生成するバイナリが set-uid root であるという事実から、このことがわかります。スティッキー ビットに注意してください。

$ 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は、ICMP ping と同様の結果をもたらす TCP パケットを生成できます。要件は、パケットを受信するためにターゲット システムで開いているポートです。ソースに基づいて、これを使用することも、そのアプローチを複製することもできます。これらは両方とも、オペレーティング システム用のパッケージとして既に利用できる場合があります。

より大規模な監視ソリューションの場合、ナギオスそしてザビックスは人気のある無料オプションですが、他にも多くのオプションがあります。

答え2

おそらくあなたが探しているものに対しては肥大化しすぎているかもしれませんが、Nagios、icinga、check_mk などのほとんどの本格的な監視ソリューションは、icmp 監視を提供し、多くの場合、クエリ可能な API を提供します。

答え3

ICMP エコーは肯定的な応答であるという点で優れていますが、リモート マシンがポート到達不能やプロトコル到達不能などの否定的な応答を提供している場合は、それらの応答を使用してマシンの稼働テストを実行することもできます。次を試してください。

  • connect()未使用のTCPポートへの接続
  • send()未使用のUDPポートへの接続

setsockopt(fd, IP_RECVERR, ...)エラーをきれいに返すには を実行し、エラー自体を受け取るには特別なオプションを使用する必要があります。(Linux の場合は、マニュアル ページ を参照してくださいip(7)。)

答え4

pingこの古い質問に対する最新の回答として、2019 年以降、ルート権限を必要とせずにリクエストを実行できる 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 カーネルのsysctl パラメータは、追加の権限や機能なしでパケットnet.ipv4.ping_group_rangeを送受信できるユーザー グループの数値範囲を定義します。ping

関連情報