• ベストアンサー

ネットワーク中の機器のMACアドレスの取得

ルーターを越えないローカルネットワーク上で、接続されている機器全てのMACアドレスを取得する方法はありますか? ことのき、全ての機器は電源が入っていてイーサネットの通信を行え、かつ00:00:00:00~ff:ff:ff:ffまでの全てのMACアドレスを一つ一つ調べていくという方法以外の解答をお願いします。 また、イーサネット環境で知りたいのでIP層以上の通信を用いた解答もなるべく無しでお願いします。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.7

arpwatch を使うなんて駄目でしょうか? arpからIPアドレスとMACアドレスのDBを作成してくれます。 また変更があれば、通知もしてくれます。 私はこれを使用して不正端末の監視をおこなっていますが。。 これでは駄目ですか?

TERIYAKIcom
質問者

お礼

回答ありがとうございます。 これは、とても良いです。 何故かというと、通信を行う機器は必ずARPリクエストをブロードキャストしてMACアドレスと上位層のプロトコルのアドレスの対応付けを行うからです。 なので、通信の開始時や一定時間経過後の再度行われる対応付けのときにARPが送信されるため、イーサネットを用いて通信を行っている機器のMACアドレスは必ず取得できます。 さらに、監視側からはパケットを送信せずに良い。 しかし、起動直後に得られないという難点はあります。 なので、そのあたりを考慮すると 「ブロードキャストで取得する方法(起動時)」+「arpwatchで用いられている方法(起動後)」 という方法が一番ベストかもしれません。 ありがとうございました。 しかし、未だブロードキャストを用いてネットワーク中の機器からMACアドレスを取得する方法を理解できていないので、もしご存知の方がいましたらご教授のほどよろしくお願いします。

その他の回答 (8)

回答No.9

7です。 トランスポート層の TCP とデータリンク層の Ethernet とはまったく違うプロトコルなので、比較できない気がしますが。。 Aruku-20030515 さんが言われているのは Ping か何かのブロードキャストではないでしょうか?192.168.0.0/24 の場合、192.168.0.255 に Echo Request を送信した後、arpテーブルを参照すれば、MACアドレスができるとのことでしょう。この場合、大量の Echo Reply が返ってきたりするので、危険かもしれませんね。

TERIYAKIcom
質問者

お礼

再度回答していただきありがとうございます。 > トランスポート層の TCP とデータリンク層の Ethernet とはまったく違うプロトコルなので、比較できない気がしますが。。 その通りです。 私がこの例を挙げたのは、データリンク層のプロトコルでACKのような応答を返すプロトコルに全く触れたことがなかったため良く理解できていなかったということと、今回は応答を返すものでは無いプロトコルであるとゆうことを言いたかっただけなので、今回はTCPを例として挙げさせて頂きました。 誤解を与えてしまい申し訳ございません。 > Aruku-20030515 さんが言われているのは Ping か何かのブロードキャストではないでしょうか? そうかもしれませんね。 この方法ならば、ブロードキャストを用いており、かつ応答の有無で端末の存在が確認できます。 >この場合、大量の Echo Reply が返ってきたりするので、危険かもしれませんね。 そうですね。 瞬時に応答パケットがハブやマシンに集中するので、注意は必要ですね。 ご忠告ありがとうございました。 あと、ここからは余談ですが読み流してもらって良いのですが。 私の周辺では「フレーム」という言葉でデータリンク層の話をしていると認識してもらえるのですが、実は世間ではあまり定着していない言葉だったりするのでしょうか。 http://www.cisco.com/japanese/warp/public/3/jp/service/info/tips/terms/J53.shtml#REF01393

TERIYAKIcom
質問者

補足

回答して頂いた皆様、ありがとうございました。 皆様のおかげで、回答の方も一通り出揃ったので、ここで締め切らせて頂きます。 今回の点数につきましては、2人にしかあげられないので、実際に手法として有効だと思えたという順に付けさせて頂きました。 他の方々にもいろいろと教えていただいたのに、点数をあげられなくて申し訳ないです。 回答して頂いた皆様、本当にありがとうございました。

回答No.8

> しかし、未だブロードキャストを用いてネットワーク中の機器からMACアドレスを取得する方法を理解できていないので、もしご存知の方がいましたらご教授のほどよろしくお願いします。 そんな方法は存在しないのではないですか? # No.1、No.5 で Aruku-20030515 が示唆しているわけですが、「イーサネットはTCPなどと異なりコネクション型のプロトコルでは無い為、通常では相手からの応答は無いはずです。」という質問者の TERIYAKIcom さんのご理解のほうが正しいように思うのですが。

TERIYAKIcom
質問者

お礼

回答ありがとうございます。 私と同じ考えの方がいて少し安心しました。 ですが、「なんでも」というのは誤解かもしれませんが、方法としてご存知かもしれないのでもう少し待たせていただこうかと思います。 ありがとうございました。

  • kanpyou
  • ベストアンサー率25% (662/2590)
回答No.6

あの~ #5さんと同意見なのですが、IPアドレスを、「自動取得」に設定していると、自分のPCに長時間『キャッシュ』する意味がありません。 アドレスを配布している『DHCPサーバ』のキャッシュを確認されると、全てではないですが、近日中に接続していたPCのアドレスは取れると思います。 静的にアドレスを配布しているのなら、「管理者」に確認を取ったほうが早いです。

TERIYAKIcom
質問者

お礼

回答ありがとうございます。 今回の目的として、全ての機器のMACアドレスを知りたいわけですが、 DHCPサーバーもネットワーク中に存在するのですが、臨時で接続する機器用で大多数の機器は固定で接続しているためDHCPからMACアドレスを取得する方法は今回は使えないです。 なので、今回は下の場合に適合するのですが、その「管理者」はどのようにすれば全てのMACアドレスを取得するのかを疑問に思っていたのです。(臨時の機器のMACアドレスも含め)

回答No.5

>>ブロードキャストを行うまでは良いのですが >>そのプロトコルのフレームはどのようなものを送れば良いのでしょうか? なんでもよいですよ。 他者への回答ですが >>コマンドを入力した以前に通信を行った端末しか得ることができません。 >>さらに、時間制限と端末数制限もあります mac情報を保存しておく生存時間もありますが まず、MACアドレスがどのタイミングで必要なのかを理解 できていれば、この回答はありえない ので、基礎を勉強されたほうがよいです

TERIYAKIcom
質問者

お礼

>>>>ブロードキャストを行うまでは良いのですが >>>>そのプロトコルのフレームはどのようなものを送れば良いのでしょうか? >>なんでもよいですよ。 なんでも良いのでしょうか? イーサネットはTCPなどと異なりコネクション型のプロトコルでは無い為、通常では相手からの応答は無いはずです。 なので、受信した端末はイーサネットフレームのソースMACアドレス部に自分のMACアドレスを格納して応答をするような通信が必要だと思っていました。 >>mac情報を保存しておく生存時間もありますが >>まず、MACアドレスがどのタイミングで必要なのかを理解 >>できていれば、この回答はありえない >>ので、基礎を勉強されたほうがよいです 今回私が想定していたものでは、 時間的には即座に全てのMACアドレスが取得できればそれに越したことは無いですが、それが無理なのであれば数分程度の時間(帯域を占有せずに)であれば良いと考えていました。 なので、ARPテーブルに格納されているMACアドレスだけという回答がこのようにさせて頂きました。 いろいろと、言葉足らずですみませんでした。

  • kanpyou
  • ベストアンサー率25% (662/2590)
回答No.4

コマンドプロンプトを開き、 arp -a と打ち込む。

TERIYAKIcom
質問者

お礼

回答ありがとうございます。 しかしこのコマンドでは、コマンドを入力した以前に通信を行った端末しか得ることができません。 さらに、時間制限と端末数制限もあります。 なので、この方法では無理と思われます。

  • cbd_mei
  • ベストアンサー率55% (143/259)
回答No.3

コマンドプロンプトで、すべての考えられるIPアドレスに対して 「ping」を実行してください そのあと、「arp -a」と実行すればIPアドレスに対応する MACアドレスが取得(表示)できます ただし、arpコマンドについては最後にアクセスしてから 数分(確か2分くらい) で消えるはずなので20個くらいのIPアドレス毎に確認していけば 大丈夫だと思います。 これを繰り返せば取得できるとは思いますが。 どうでしょうか。

TERIYAKIcom
質問者

お礼

解答ありあがとうございます。 cbd_meiさんが言われた通りその方法でも可能なのですが、pingの方法ですとICMP Echoを用いてますので。 やはり、IP層以上のコマンドを用いた手法でしか実現できないのでしょうか?

  • seiuchi4
  • ベストアンサー率37% (71/189)
回答No.2

MicrosoftNetwork上のMACアドレスを取得したいのであれば 下記URLの「DomainView--」など如何でしょうか? ドメイン参加しているPCの PC名、IPアドレス、MACアドレス、DCの種別etc などを自動収集し、csv形式で書き出す事もできますよ。

参考URL:
http://www.vector.co.jp/soft/winnt/net/se195004.html
TERIYAKIcom
質問者

お礼

解答ありがとうございます。 ぱっと見た限りなのですが、このソフトはドメインを管理しているサーバーから情報を取得しているようなので、自分が考えている物とは違うようです。 目的として、OSに限定されず、なるべく標準のイーサネットの通信で行える(独自のソフトウェアを追加する必要がない)ということを、考えていました。 私のために調べて解答していただきありがとうございました。

回答No.1

・インテリジェントハブならそこから情報をもらう。 そうでなければ ・クライアントからブロードキャストしてみて反応を見てみる くらいでしょうか? 管理とかログを保持しないハブだと、定期的にMAC情報をリフレシュするので、 確実な方法は一つ一つ確認するしかないと思います

TERIYAKIcom
質問者

お礼

早速の解答ありがとうございます。 2つ解答を頂いたのですが、 1つ目は、そのような高機能なハブではないので無理でした。 2つ目は、ブロードキャストを行うまでは良いのですが、そのプロトコルのフレームはどのようなものを送れば良いのでしょうか? こちらの知識不足でお手数をかけますが、よろしくお願いします。