このエントリーをはてなブックマークに追加


IPv4からMACアドレス取得するSendARP()APIを使ってみる

iphlpapi.dllのSendARP関数を使用しIPv4アドレスからMACアドレスを取得するサンプルコードを以下に記します。
MACアドレスを取得するIPv4アドレスはネットワーク上に存在しているPCのIPアドレスを指定しています。

関連記事

参考サイト

動作確認環境

  • Windows 10 ver.22H2
  • .NET6.0
  • Visual Studio 2022

サンプルコード

SendARPコマンドを使用したC#サンプルコードを以下に記します。
IPv4アドレスを指定しMACアドレスを取得しています。
動作確認時は、みなさんの環境にあったIPv4アドレスに変更し実行してください。 エラーコードに67が返却された場合は、以下のような原因が考えられます。

  • 同一サブネットではないためARPが届かない
  • 宛先の機器が動作していない
using System.Net;
using System.Runtime.InteropServices;   // SendAPI Win32APIを使用するため

namespace SendArpSample
{
    internal class Program
    {
        [DllImport("iphlpapi.dll", ExactSpelling = true)]
        private static extern int SendARP(int DestIP, int SrcIp, byte[] pMacAddr, ref int PhyAddrLen);

        static void Main(string[] args)
        {
            string targetIPv4 = "192.168.1.201"; // MACアドレスを取得するIPv4アドレスを設定
            int adr = BitConverter.ToInt32(IPAddress.Parse(targetIPv4).GetAddressBytes(), 0);  //IPv4値を値に変換
            byte[] macAdr = new byte[6];    // MACアドレス格納用
            int macAdrLen = macAdr.Length;

            int ret = SendARP(adr, 0, macAdr, ref macAdrLen);   // ARP送信(SendARP APIを実行)
            if (ret != 0)
            {
                Console.Error.WriteLine("error code: " + ret);
                Environment.Exit(ret);
            }
            string mac = string.Format("{0:x2}-{1:x2}-{2:x2}-{3:x2}-{4:x2}-{5:x2}", macAdr[0],
                                                                                    macAdr[1],
                                                                                    macAdr[2],
                                                                                    macAdr[3],
                                                                                    macAdr[4],
                                                                                    macAdr[5]);
            Console.WriteLine("IPv4:{0}, MAC:{1}", targetIPv4, mac);
        }
    }
}

実行結果例

上記のコンソールアプリケーションを実行したときの出力例となります。

IPv4:192.168.1.201, MAC:xx-xx-xx-xx-xx-xx

以上、SendARP API を使ってIPv4からMACアドレス取得するサンプルコードでした。


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2023-04-22 (土) 17:25:12