iphlpapi.dllのSendARP関数を使用しIPv4アドレスからMACアドレスを取得するサンプルコードを以下に記します。
MACアドレスを取得するIPv4アドレスはネットワーク上に存在しているPCのIPアドレスを指定しています。
SendARPコマンドを使用したC#サンプルコードを以下に記します。
IPv4アドレスを指定しMACアドレスを取得しています。
動作確認時は、みなさんの環境にあったIPv4アドレスに変更し実行してください。
エラーコードに67が返却された場合は、以下のような原因が考えられます。
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アドレス取得するサンプルコードでした。