public class GetMac
{
///<summary>
/// 根据截取ipconfig /all命令的输出流获取网卡Mac
///</summary>
///<returns></returns>
public static List<string> GetMacByIpConfig()
{
List<string> macs =new List<string>();
ProcessStartInfo startInfo = new ProcessStartInfo("ipconfig", "/all");
startInfo.UseShellExecute = false;
startInfo.RedirectStandardInput = true;
startInfo.RedirectStandardOutput = true;
startInfo.RedirectStandardError = true;
startInfo.CreateNoWindow = true;
Process p = Process.Start(startInfo);
//截取输出流
StreamReader reader = p.StandardOutput;
string line = reader.ReadLine();
while (!reader.EndOfStream)
{
if (!string.IsNullOrEmpty(line))
{
line = line.Trim();
if (line.StartsWith("物理地址"))
{
macs.Add(line.Substring());
}
}
line = reader.ReadLine();
}
//等待程序执行完退出进程
p.WaitForExit();
p.Close();
reader.Close();
return macs;
} ///<summary>
/// 通过WMI读取系统信息里的网卡MAC
///</summary>
///<returns></returns>
public static List<string> GetMacByWmi()
{
List<string> macs =new List<string>();
string mac ="";
ManagementClass mc =new ManagementClass("Win32_NetworkAdapterConfiguration");
ManagementObjectCollection moc = mc.GetInstances();
foreach (ManagementObject mo in moc)
{
if ((bool)mo["IPEnabled"])
{
mac = mo["MacAddress"].ToString();
macs.Add(mac);
}
}
return macs;
} ///<summary>
/// 通过NetworkInterface读取网卡Mac
///</summary>
///<returns></returns>
public static List<string> GetMacByNetworkInterface()
{
List<string> macs =new List<string>();
NetworkInterface[] interfaces = NetworkInterface.GetAllNetworkInterfaces();
foreach (NetworkInterface ni in interfaces)
{
macs.Add(ni.GetPhysicalAddress().ToString());
}
return macs;
} ///<summary>
/// 通过SendARP获取网卡Mac
/// 网络被禁用或未接入网络(如没插网线)时此方法失灵
///</summary>
///<param name="remoteIP"></param>
///<returns></returns>
public static string GetMacBySendArp(string remoteIP)
{
StringBuilder macAddress =new StringBuilder();
try
{
Int32 remote = inet_addr(remoteIP);
Int64 macInfo =new Int64();
Int32 length =;
SendARP(remote, , ref macInfo, ref length);
string temp = Convert.ToString(macInfo, ).PadLeft(, '').ToUpper();
int x =;
for (int i =; i <; i++)
{
if (i ==)
{
macAddress.Append(temp.Substring(x -, ));
}
else
{
macAddress.Append(temp.Substring(x -, ) +"-");
}
x -=;
}
return macAddress.ToString();
}
catch
{
return macAddress.ToString();
}
} [DllImport("Iphlpapi.dll")]
private static extern int SendARP(Int32 dest, Int32 host, ref Int64 mac, ref Int32 length);
[DllImport("Ws2_32.dll")]
private static extern Int32 inet_addr(string ip);
}

本文来自博客http://www.cnblogs.com/diulela/archive/2012/04/07/2436111.html

最新文章

  1. Symbol not found for architecture arm64 错误
  2. Poj(3687),拓扑排序,
  3. 《Linux/Unix系统编程手册》读书笔记8 (文件I/O缓冲)
  4. cocos2d-x中使用json
  5. JAVAAPI学习之Calendar类;Calendar类set()、add()、roll()方法区别
  6. C# 5 break continue 球员成绩 彩票 选班长
  7. [Swust OJ 1084]--Mzx0821月赛系列之情书(双线程dp)
  8. ERR_NAME_NOT_RESOLVED错误的解决
  9. Springboot 系列(三)Spring Boot 自动配置原理
  10. js删除数组中元素 delete 和splice的区别
  11. Apache-Flink深度解析-State
  12. Variables多种表达
  13. SQLServer代理新建或者编辑作业报错
  14. 企业应用--web环境部署于上线流程
  15. C# WPF 用MediaElement控件实现视频循环播放
  16. 在Ubuntu 14.04 64bit上安装Markdown和绘图软件Haroopad
  17. 2016/2/13 《计算机系统要素》(The Elements of Computing Systems)读书笔记(1)
  18. contiki list 链表
  19. ruby里面的毒瘤
  20. 【Java】全站编码过滤器GenericEncodingFilter代码与配置

热门文章

  1. hdu 4296 Buildings(贪婪)
  2. maven snapshot和release版本号之间的差
  3. XML数据读取方式性能比较(一)
  4. poj1276--Cash Machine(多背包被判刑了)
  5. c# winform panel 流式布局 panel块可自动排列
  6. javascript滚动栏响应鼠标滑轮的实现上下滚动事件
  7. C语言,如何检查文件是否存在和权限的信息
  8. Android checkbox和radiobutton 以及Toast和AlertDialog的使用
  9. sql 学习笔记 档
  10. CSS不常见问题汇总