1

IPアドレスをMACアドレスに変換してから、バイト配列に変換しようとしています。私は最初の部分で立ち往生していて、これを行う方法がわかりません。いくつかの検索結果が話題になっているのを見ましSystem.Net.NetworkInformation.NetworkInterfaceたが、使い方がわかりません。

これはMACバイト配列を必要とする私のコードです。これを行う方法?

[DllImport("iphlpapi.dll", ExactSpelling = true)]
public static extern int SendARP(int DestIP, int SrcIP, byte[] pMacAddr, ref uint PhyAddrLen);

private void Ping(IPAddress address)
{
    byte[] macAddr = new byte[6];
    uint macAddrLen = uint.Parse(macAddr.Length.ToString());

    if (SendARP(int.Parse(address.ToString()), 0, macAddr, ref macAddrLen) == 0)
    {
        //SUCCESS!
    }
}
4

3 に答える 3

6

あなたがやろうとしていることについて知りましょう。あなたの電話番号を通りの名前に翻訳するのと同じです-それらの間に相関関係はありません。

MACアドレスはイーサネットレベルのドライバでコード化されていますが、IPアドレスはIPプロトコルの上位にある人工的な構成です。ZERoの関係です。ルーターは、プロトコル(ARP-アドレス解決プロトコル)を介してIPパケットを送信するMACアドレスを検出しますが、これはネットワークセグメントを通過できません。

于 2012-01-19T15:21:31.240 に答える
4

ここを見てください:

byte[] macAddr = new byte[6];
uint macAddrLen = (uint) macAddr.Length;
if (SendARP((int)address.Address, 0, macAddr, ref macAddrLen) != 0)
    throw new InvalidOperationException("SendARP failed.");

string[] str = new string[(int)macAddrLen];
for (int i = 0; i < macAddrLen; i++)
    str[i] = macAddr[i].ToString("x2");

Console.WriteLine(string.Join(":", str));
于 2012-01-19T15:19:53.990 に答える
3

実際には、MACアドレスが提供されます。コンピュータが持っているMACアドレスを知る必要はありません。関数SendARPを呼び出した後、macAddrはMACアドレスを保持します。

MSDNのドキュメントでは、パラメータmacAddrとmacAddrLenが[out]としてマークされていることがわかります。これは、関数がこの引数を使用して値を返すことを意味します。

アドレス解決プロトコルの要点は、ネットワーク層アドレス(IP)を物理アドレス(MAC)に解決できることです。

于 2012-01-19T15:20:59.050 に答える