我想取得机器的Mac地址,语言是C#:
一、windows应该程序.exe,即.exe运行时,取得本机的Mac,该怎样取?能给出代码吗?同时请注意,如果本机的操作系统分别是win98、win2000,是否应该注意区分,同时是否应该区别16位或32位操作系统,当然这个可能有些过虑了。二、web方式的取客户端Mac地址,请注意是客户端,而不是服务器端。同时有两点疑虑:
1.是否要考虑客户端的操作系统诸如win98、win2000的区别。
2.是否要考虑直接拨号上网和代理上网的区别。
如果用的是activeX、dll等方式,就免了,我可以参照一,您就请顶一下,分一样给。非常感谢。
在有正解之前顶者有分。
一、windows应该程序.exe,即.exe运行时,取得本机的Mac,该怎样取?能给出代码吗?同时请注意,如果本机的操作系统分别是win98、win2000,是否应该注意区分,同时是否应该区别16位或32位操作系统,当然这个可能有些过虑了。二、web方式的取客户端Mac地址,请注意是客户端,而不是服务器端。同时有两点疑虑:
1.是否要考虑客户端的操作系统诸如win98、win2000的区别。
2.是否要考虑直接拨号上网和代理上网的区别。
如果用的是activeX、dll等方式,就免了,我可以参照一,您就请顶一下,分一样给。非常感谢。
在有正解之前顶者有分。
{
string dirResults="";
ProcessStartInfo psi = new ProcessStartInfo();
Process proc = new Process();
psi.FileName = "nbtstat";
psi.RedirectStandardInput = false;
psi.RedirectStandardOutput = true;
psi.Arguments = "-A " + IP;
psi.UseShellExecute = false;
proc = Process.Start(psi);
dirResults = proc.StandardOutput.ReadToEnd();
proc.WaitForExit();
dirResults=dirResults.Replace("\r","").Replace("\n","").Replace("\t","");Regex reg=new Regex("Mac[ ]{0,}Address[ ]{0,}=[ ]{0,}(?<key>((.)*?))__MAC",RegexOptions.IgnoreCase|RegexOptions.Compiled);
Match mc=reg.Match(dirResults+"__MAC");if(mc.Success)
{
return mc.Groups["key"].Value;
}
else
{
reg=new Regex("Host not found",RegexOptions.IgnoreCase|RegexOptions.Compiled);
mc=reg.Match(dirResults);
if(mc.Success)
{
return "Host not found!";
}
else
{
return "";
}
}
}
ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
ManagementObjectCollection moc = mc.GetInstances();
StringBuilder sb = new StringBuilder();
foreach(ManagementObject mo in moc)
{
if((bool)mo["IPEnabled"] == true)
sb.Append(mo["MacAddress"].ToString());
mo.Dispose();
}
MessageBox.Show(sb.ToString());操作系统不必考虑
但是楼上的方法只能取得局域网同一个网段内电脑的IP,过了网关就不行了,这种情况下必须得用ActiveX
而且一楼这位说的是可以,但是会闪过一个nbtstat的窗口。
一楼的程序如果想不出现窗口,再加个属性就行了
psi.CreateNoWindow = true;
psi.WindowStyle = ProcessWindowStyle.Hidden;
windows程序和web程序当然有区别,即使用的是同一个类库,
如果是windows程序,取的就是本机(当然如果有需要你还可以取同一网段的别的机器);如果是web程序,取的却是Web服务器的,而我要取的却是客户端的mac。
是这样的吧
using System.Management;ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_NetworkAdapterConfiguration");// Win32_NetworkAdapter");
foreach (ManagementObject share in searcher.Get())
{
try
{
string sNetCardID=share["MACAddress"].ToString();
string sIP=share["IPAddress"].ToString();
if(sNetCardID!="")
{
return sNetCardID;
}
}
catch
{
}
}
所以windows程序和web程序没有本质的区别