网卡MAC地址获取,要求比较特殊哦!:-)

X_Craft 2009-07-28 03:43:27
相对于CPUID,硬盘SN,网卡MAC地址具有比较好的用于生成机器码的特性,但现在有一些软件在使用过程中需要修改MAC地址,如群发软件,而且网卡的MAC地址是可以通过注册表方式修改的,于是乎使用WMI、或NetBios API获取是网卡地址可能是并不是网卡固件中的真实地址,于是我想到了DeviceIoControl API,有相关经验或代码参考么,针对网卡的
...全文
497 4 打赏 收藏 举报
写回复
4 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
guoyichao 2009-07-30
不是每块网卡都能取到出厂Mac地址,用EEPROM的网卡可以随意改写出厂设置的。
  • 打赏
  • 举报
回复
X_Craft 2009-07-30
一楼的方法很cool,不过还是达不到要求
二楼的方法the same
本贴的目的是为了获取真实mac地址,而不是伪装后的
  • 打赏
  • 举报
回复
mywisest 2009-07-28
/// <summary>
/// 网卡MAC地址。
/// </summary>
static public string MACAddress
{
get
{
if (string.IsNullOrEmpty(_macAddress))
{
string filename = System.IO.Path.Combine(FileUtil.AppDir, "Network.txt");
System.IO.StreamWriter writer = new System.IO.StreamWriter(filename, false);
ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
ManagementObjectCollection moc = mc.GetInstances();
foreach (ManagementObject mo in moc)
{
foreach (PropertyData property in mo.Properties)
{
writer.WriteLine("{0} = {1};", property.Name, property.Value);
#if DEBUG
Console.WriteLine("{0} = {1};", property.Name, property.Value);
#endif
}
if ((bool)mo["IPEnabled"] == true)
_macAddress = mo["MacAddress"].ToString();
if (!String.IsNullOrEmpty(_macAddress) && !IsException)
{
writer.Close();
System.IO.File.Delete(filename);
break;
}
mo.Dispose();
}
writer.Close();
moc.Dispose();
}
return _macAddress;
}
}
  • 打赏
  • 举报
回复
hhh871030 2009-07-28

/// <summary>
/// 获取客户端的mac地址
/// </summary>
/// <param name="IP"></param>
/// <returns></returns>
public string GetCustomerMac(string IP)
{
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();

//匹配mac地址
Match m = Regex.Match(dirResults, "\\w+\\-\\w+\\-\\w+\\-\\w+\\-\\w+\\-\\w\\w");

//若匹配成功则返回mac,否则返回找不到主机信息
if (m.ToString() != "")
{
return m.ToString();
}
else
{
return "找不到主机信息";
}

}
  • 打赏
  • 举报
回复
发帖
C#

10.8w+

社区成员

.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
帖子事件
创建了帖子
2009-07-28 03:43
社区公告

让您成为最强悍的C#开发者