2011-10-19 5 views
4

生のパケットを送信した後、スイッチ環境でマシンのMACアドレスを調べようとしています。私はtracerouteコマンドを実装しようとしています。私はICMP時間を超過したメッセージを受信したときに、そのマシンのMACアドレスをどのように抽出できるのかを知りたい。私はネットワークプログラミングの初心者です。だから、ソケットコールが私にMACアドレスの抽出に役立つのか混乱しています。linuxのcでicmpの返信からmacアドレスを抽出するには

ありがとうございました。

+0

また、ソケットを完全に理解するための良い本を教えてください。 – j10

+2

W. Richard StevensのUNIXネットワークプログラミングhttp://www.amazon.com/Unix-Network-Programming-Sockets-Networking/dp/0131411551 - 私は強く推薦できる第1版のみを持っています... - とにかく私は、第3はあまり啓蒙されていないと仮定します。 – alk

+0

これを試してください:http://stackoverflow.com/questions/4012921/how-to-determinate-destination-mac-address –

答えて

4

いいえ、ICMP応答からMACアドレスを抽出することはできません。

あなたの隣にあるリンクされたマシンのMACアドレスを特定できます。 ICMP(tracert)では、ターゲットマシンまたはミドルマシンのIPアドレスを見つけることができます。

MACアドレスを検出する場合は、インターネット以外のローカルネットワークに適用できるARPプロトコルを使用する必要があります。

IPv4ヘッダー[1]の後にICMPプロトコルが開始され、MACアドレスが物理/リンクレイヤーに関連しています。低レベルのレイヤーでは、ネットワーク(IP)や伝送などの最上位レイヤーからMACアドレスが透過的になります。

MACアドレスを判別するには、RawソケットまたはPCAP SDKsを使用してネットワークプログラミングの下位層にアクセスする必要があります。 (私はもう一度言います、これらはインターネット上では有用ではありません)

+0

次に、レイヤ2でルートをトレースするtraceroute macコマンドを実装するにはどうすればいいですか? – j10

+0

["イーサネットアドレス解決プロトコル"](http://tools.ietf.org/html/rfc826)のARPを使用することができます。インターネット経由でMACを取得する標準的な方法はありません。 – deepmax

0

Masoud M氏によると、ローカルネットワーク上のマシンのMACアドレスしか取得できませんでした。つまり、arpコマンドの出力を解析して、ローカルネットワーク上のマシンのIPアドレスを指定したMACアドレスを見つけることができます。

+0

次にレイヤ2でルートをトレースするtraceroute macコマンドを実装するにはどうすればいいですか? – j10

+0

@ JitenShah、http:// routemyworldで説明されているCisco Layer 2 tracerouteについてお話ししていますか?com/2009/05/01/layer-2-traceroute /?その場合は、シスコ独自のCisco Discovery Protocolを使用する必要があります。開いているLink Layer Discovery Protocolと似たようなことができるかもしれませんが、ルート沿いの機器はそのプロトコルを実装する必要があります。そのため、機器をどのように相互接続しているかを調べるにはマニュアルを読む必要があります。また、CDPとLLDPの両方がローカルネットワークに限定されており、LANの外にMACアドレスを取得することはできません。 –

+0

ありがとうございます。ええ、CDPについて話していました。その場合、私はアルゴリズムを賢明に進めるべきですか?私はこれがレイヤー2の仕組みをどのように視覚化することができません。あなたが言うとき:traceroue mac1 mac2それはどのように機能しますか? 私はRARP(Reverse)を使用し、ntheコマンドで使用されている2つのデバイスのIPを見つけて、IPをフェッチして中間デバイスのMACアドレスを取得するトレースルート@レイヤ3を実行する必要があります。 CDPはどのように私を助けますか? – j10

0

一般に、インターネットでは、ホストがパケットを送信するために使用しているメディアを知らないこともあります。リモートホストがPPPプロトコルを使ってシリアルrs-232-Cリンクで接続されているとします。それは、MACアドレスを持っていません。これは、たとえば、ホストがトークンリングインターフェイスまたはフレームリレーリンクを使用している場合にも発生します。これはローカルの問題を完全にホストするリモートのMACアドレスを決定します。通常、あなたがパケットをリモートサイトからイーサネットを介して取得すると、パケットに含まれるソースmacアドレスは、IPパケットを送信した元のホストではなく、インターネットにつながる最後のルータの1つです。鳥類キャリア上のRFC(rfc1149、rfc2549、rfc6214)では、送信に使用されるメディアはMACアドレスを使用できません(ピギージョンにある程度可能であれば、リンクアドレスはその名前になります)

スイッチのイーサネットネットワーク上でtracerouteについて読んでみたいと思ったら、スイッチ(tracelinkサービス)上でtraceroutingを行う仕様を持っているIEEE802.1agを見なければならないかもしれませんが、回答。

関連する問題