« 2005年11月6日 - 2005年11月12日 | トップページ | 2005年11月20日 - 2005年11月26日 »

2005年11月14日 (月)

arpingって知ってますか?

古い話ばかりでは何ともならんのでちょっとは役に立つお話を一つ。
ネットワーク管理などをやってますと、LANに接続されているマシンを調べたいということが時々あります。状況は色々ですが、今生きているマシンを調べたいとか、管理者に連絡無く接続されたマシンを調べたいとか、そんな場合です。
そのために、まず思い付くのが、片っ端からpingをかけるやりかたです。例えば192.68.1.1から244まで一発ping(オプションに-c1とすると一発pingになります)をかけ、応答が帰ってきたマシンについて"/sbin/arp -a"で調べればEthernetアドレスもわかります。片っ端pingはシェルスクリプトでもできますし、私などは以前perlスクリプトから起動して接続中のマシンなどを調べていました。
ところが、このping法には問題がいくつかあります。まず、相手マシンが応答しない場合、応答を待つ時間が長くて、最後のマシンまで検査が終わるのにえらい時間がかかります。いまのpingは-wオプションで待ち時間が制限できるようですが、伝統的なpingにはそういうオプションは無かったと思います。
次の問題は、man pingによりますと「pingをトラブルの無いときや自動スクリプトから実行することは奨められない」と指摘されていることです。たしかにネットに負荷をかけるみたいですし、manが言ってることには従うべきでしょう。
さらに、pingというのはネットへの攻撃などにも登場するようですから、やはり濫用は好ましくないです。最近のパソコンのフィルタソフト(ノートンインターネットセキュリティーなど)では、pingに応答しないようになっていたりするようです。以前、私がpingを濫用していたとき、あるユーザーから「最近何か攻撃を受けている」と相談があり、行ってフィルタソフトのlogを調べてみたら、私のマシンから一時間に一度発せられるpingだったという経験があります。「いや、これは多分大丈夫だと思うよー」なんて言ってごまかしましたが。また、pingは外部にも届きますので(最近は上流でブロックされることが多いようですが)、アドレスを間違ってどこぞに片っ端pingなど掛けようものなら、あやしい攻撃と判断されても言い訳ができません。
というわけで、前置きが長くなりましたが、そういうときにpingに替わって便利なのがarpingというコマンドです。vine linuxとかなら、/sbin/arpingか/usr/sbin/arpingとしてインストールされていると思います。これはarpを使ったpingのようなもので、あるIPアドレスにこれを使うと次のような応答が得られます。

  $  /usr/sbin/arping -c1 192.168.10.200
  ARPING 192.168.10.200 from 192.168.10.10 eth0
  Unicast reply from 192.168.10.200 [00:02:2D:0F:26:52]  1.456ms
  Sent 1 probes (1 broadcast(s))
Received 1 response(s)

これは一発arpingの例ですが、応答時間の他にEthernetアドレスも返してくれます。arpにはさすがにみんな応答してくれるし(でなきゃサブネット内の通信ができませんから)、間違えて外部のIPアドレスを指定しても通常外に出て行くことはありません。難点と言えば、rootでしか実行できないことと、arpingを実行したマシン自身は応答しないことでしょうか。あと、まあブロードキャストですからやはり濫用はいかんと思いますが。
arpingを使って、例えばperlで次のようなスクリプトを実行すると(rootで)、サブネット上で生きているマシンとそのEthernetアドレスのリストが得られます。

#!/usr/bin/perl
for($i=1; $i<=254; $i++){
  open(ARPING,"/usr/sbin/arping -c1 192.168.10.$i |");
  while(<ARPING>){
    if(/reply from 192.168.10.$i \[([0-9A-F]{1,2}:[0-9A-F]{1,2}:[0-9A-F]{1,2}:[0-9A-F]{1,2}:[0-9A-F]{1,2}:[0-9A-F]{1,2})\]/){
      print "192.168.10.$i ---> $1\n";
    }
  }  close(ARPING);
}

Ethernetアドレスがわかれば、NICのメーカーなんかもわかりますから、とても便利です。

| | コメント (0) | トラックバック (0)

« 2005年11月6日 - 2005年11月12日 | トップページ | 2005年11月20日 - 2005年11月26日 »