WMI सबसे अच्छा समाधान है यदि आप जिस मशीन से कनेक्ट कर रहे हैं वह एक विंडोज़ मशीन है, लेकिन यदि आप एक लिनक्स, मैक, या अन्य प्रकार के नेटवर्क एडाप्टर को देख रहे हैं, तो आपको कुछ और उपयोग करने की आवश्यकता होगी। यहाँ कुछ विकल्प दिए गए हैं:
- DOS कमांड nbtstat -a का उपयोग करें। एक प्रक्रिया बनाएं, इस कमांड को कॉल करें, आउटपुट को पार्स करें।
- यह सुनिश्चित करने के लिए कि आपका ARIC तालिका ARP तालिका में है, तो DOS कमांड arp -a का उपयोग करें। विकल्प 1 की तरह प्रक्रिया के आउटपुट को पार्स करें।
- Iphlpapi.dll में sendarp के लिए एक खतरनाक अप्रबंधित कॉल का उपयोग करें
वस्तु # 3 का एक नमूना। यदि WMI एक व्यवहार्य समाधान नहीं है तो यह सबसे अच्छा विकल्प लगता है:
using System.Runtime.InteropServices;
...
[DllImport("iphlpapi.dll", ExactSpelling = true)]
public static extern int SendARP(int DestIP, int SrcIP, byte[] pMacAddr, ref uint PhyAddrLen);
...
private string GetMacUsingARP(string IPAddr)
{
IPAddress IP = IPAddress.Parse(IPAddr);
byte[] macAddr = new byte[6];
uint macAddrLen = (uint)macAddr.Length;
if (SendARP((int)IP.Address, 0, macAddr, ref macAddrLen) != 0)
throw new Exception("ARP command failed");
string[] str = new string[(int)macAddrLen];
for (int i = 0; i < macAddrLen; i++)
str[i] = macAddr[i].ToString("x2");
return string.Join(":", str);
}
जहां यह देय है, उसे क्रेडिट देने के लिए, यह उस कोड का आधार है:
http://www.pinvoke.net/default.aspx/iphlpapi.sendarp#