C#如何获得设备Mac地址之欧阳治创编Word下载.docx
《C#如何获得设备Mac地址之欧阳治创编Word下载.docx》由会员分享,可在线阅读,更多相关《C#如何获得设备Mac地址之欧阳治创编Word下载.docx(6页珍藏版)》请在冰豆网上搜索。
![C#如何获得设备Mac地址之欧阳治创编Word下载.docx](https://file1.bdocx.com/fileroot1/2022-11/27/78559d46-5fd5-4a48-8d9e-b8322eb2eade/78559d46-5fd5-4a48-8d9e-b8322eb2eade1.gif)
SELECT
*
FROM
Win32_NetworkAdapterConfiguration"
)
;
2.ManagementObjectCollection
queryCollection
query.Get();
3.foreach(
ManagementObject
mo
in
4.{
5.
if(mo["
IPEnabled"
].ToString()
==
"
True"
6.
mac
mo["
MacAddress"
].ToString();
7.}
获取远程主机的MAC地址时,需要借用API函数SendARP.该函数使用ARP协议,向目的主机发送ARP包,利用返回并存储在高速缓存中的IP和MAC地址对,从而获取远程主机的MAC地址.
1.Int32
ldest=
inet_addr(remoteIP);
//目的ip
2.Int32
lhost=
inet_addr(localIP);
//本地ip
3.try
Int64
macinfo
new
Int64();
Int32
len
6;
7.
int
res
SendARP(ldest,0,
ref
macinfo,
len);
//发送ARP包
8.
return
Convert.ToString(macinfo,16);
9.}
10.catch(Exception
err)
11.{
12.
Console.WriteLine("
Error:
{0}"
err.Message);
13.}
14.return
0.ToString();
但使用该方式获取MAC时有一个很大的限制,就是只能获取同网段的远程主机MAC地址.因为在标准网络协议下,ARP包是不能跨网段传输的,故想通过ARP协议是无法查询跨网段设备MAC地址的。
示例程序:
1.using
System.Net;
2.using
System;
3.using
System.Management;
4.using
System.Runtime.InteropServices;
5.namespace
ConsoleApplication2
6.{
public
class
Program
{
9.
[DllImport("
Iphlpapi.dll"
)]
10.
private
static
extern
SendARP(Int32
dest,
host,
mac,
length);
11.
Ws2_32.dll"
inet_addr(string
ip);
13.
//获取本机的IP
14.
string
getLocalIP()
15.
16.
17.
IPHostEntry
18.
19.
(strAddr);
20.
}
21.
//获取本机的MAC
22.
getLocalMac()
23.
24.
null;
25.
//[DllImport("
System.Management.dll"
26.
ManagementObjectSearcher
);
27.
ManagementObjectCollection
28.
foreach
(ManagementObject
queryCollection)
29.
30.
if
(mo["
31.
32.
33.
(mac);
34.
35.
//获取远程主机IP
36.
string[]
getRemoteIP(string
RemoteHostName)
37.
38.
Dns.GetHostByName(RemoteHostName);
39.
IPAddress[]
IpAddr
ipEntry.AddressList;
40.
string[IpAddr.Length];
41.
for
(int
i=0;
i<
strAddr.Length;
i++)
42.
43.
strAddr[i]
IpAddr[i].ToString();
44.
45.
return(strAddr);
46.
47.
//获取远程主机MAC
48.
getRemoteMac(string
localIP,
remoteIP)
49.
50.
ldest
51.
lhost
52.
try
53.
54.
55.
56.
57.
macnum
Convert.ToString(macinfo,
16);
//16进制的Mac地址数据
58.
macArr
string[macnum.Length];
59.
macaddr="
60.
i
0;
<
(macnum.Length/2);
61.
62.
macArr[i]
macnum[macnum.Length
-
2*(i+1)].ToString()+macnum[macnum.Length-2*i-1].ToString();
//将Mac地址顺序转置
63.
64.
j=0;
j<
j++)
65.
66.
if(j==0)
67.
68.
macaddr
macArr[0].ToString();
69.
70.
else
71.
72.
macaddr+"
:
+macArr[j].ToString();
73.
74.
75.
macaddr;
76.
77.
catch
(Exception
78.
79.
err.Message);
80.
81.
无法获得MAC地址"
82.
83.
void
Main(string[]
args)
84.
85.
gi
Program();
86.
本地网卡信息:
87.
Console.WriteLine(gi.getLocalIP()
+
gi.getLocalMac());
88.
/n/r远程设备的网卡信息:
89.
temp
gi.getRemoteIP("
MyComputer"
//远程设备的Host名称
90.
for(int
temp.Length;
91.
92.
Console.WriteLine(temp[i]);
93.
94.
/n/r远程设备的Mac信息:
95.
DeviIP
192.168.0.5"
//远程设备的IP地址
96.
Console.WriteLine(gi.getRemoteMac(gi.getLocalIP(),
DeviIP));
97.
Console.ReadKey();
98.
99.
100.}
注:
在VisualStudio2008中,可能会出现:
找不到类型或命名空间名称“ManagementObjectSearcher”(是否缺少using指令或程序集引用?
类似的错误提示。
出现这种错误的原因是没有添加对System.Management.Dll的引用。
解决办法:
在“解决方案资源管理器”-“引用”上点击右键,选择“添加引用”,在打开的列表中选择“System.Management”,点击“确定”即可。