とある事情により与えられた IP アドレスの一覧から生きているものを抜き出すことになった。一個一個端末を確認して回るのはあり得ないし、ping を打って確認するのもめんどいなぁ・・・と思って
ruby ping
でグーグル先生に聞いたら ruby に ping のライブラリが有ることを教えてくれた。なんでもあるなぁと思いつつロジックをくんでみた。
require 'ping' Ping.pingecho(address)
これで OK かと思ったら、明らかに生きてるのに false が返ってくるものがある・・・。改めてリファレンスを確認する。
host の TCP サービスserviceに対して接続を試み成功すれば true を返します。ping(1) と異なり ICMP を使用しないので root 権限を必要としない利点があります。
Ping
相手から何も返ってこずタイムアウトの場合のみ false を返す。相手からの能動的な接続拒否の場合には true を返す。
注)あなたが接続を許可されていないサーバのサービスに対してこのメソッドを使うのは推奨しない。
「ICMP」と「接続を許可されていない」がキーワードか?良く分からないので手っ取り早く
ret = `ping -n 1 #{address}` if ret =~ /Reply/ # OK な場合 else # NG な場合 end
と書いて一覧を作り直した・・・。あとで調べる。