IPv4からMACアドレス取得するSendARP()APIを使ってみる †iphlpapi.dllのSendARP関数を使用しIPv4アドレスからMACアドレスを取得するサンプルコードを以下に記します。 関連記事 †参考サイト †
動作確認環境 †
サンプルコード †SendARPコマンドを使用したC#サンプルコードを以下に記します。
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アドレス取得するサンプルコードでした。 |