2012-02-09 3 views
0

最新のプロジェクトでは、GetIpNetTableを使用してC#からWindows ARP-Tableにアクセスしました。システムコールGetIpNetTableの物理アドレスが8バイト(6ではない)の理由は何ですか?

MACアドレスを見たとき、私のエントリの最後の2バイト(7と8)変化! MACアドレスは、通常は6バイトのみ持っているとして 、私はリンク層は、常にイーサネットではないので

http://msdn.microsoft.com/en-us/library/cc704859%28v=prot.10%29.aspx

ypedef struct _MIB_IPNETROW { 
    DWORD dwIndex; 
    DWORD dwPhysAddrLen; 
    BYTE bPhysAddr[8]; // WHY 8 BYTES?? 
    DWORD dwAddr; 
    DWORD dwType; 
} MIB_IPNETROW, 
*PMIB_IPNETROW; 

答えて

2

を見るこれらの2つのバイトが含まれているかと思った、物理アドレスは、常にではありませんMACであり、常に48ビットであるとは限りません。このフィールドにはEUI-64アドレスが含まれているとします.EUI-64アドレスは、MAC EUI-48アドレスの中央にFF-FFを挿入して生成します。

+0

Hm。私がarp -aを実行したとき、Windowsは6バイトの同じARP-Entry(どこにでもFFバイトなし)を表示します。 GetIpNetTableだけが追加のバイトを持っています...それらの最初の6つはarp -aのものと等しく、他のものは主に0x00:0x00ですが、時にはそれらの値が変化します... –

+1

まあ、 'arp'はイーサネット固有ですMACについて知っておくべきですが、構造は普遍的に見えます。それがEUI-64でない場合、6バイトだけが重要であり、他の2つはゴミを含んでいるかもしれません。 – wRAR

関連する問題