Mac地址自动生成器核心处理类
1.更新MAC地址
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using Microsoft.Win32;
- using System.Net.NetworkInformation;
- using System.Management;
- using System.Threading;
- using System.Runtime.InteropServices;
- using NETCONLib;
- namespace DynamicMAC
- {
- public class MACHelper
- {
- [DllImport("wininet.dll")]
- private extern static bool InternetGetConnectedState(int Description, int ReservedValue);
- /// <summary>
- /// 是否能连接上Internet
- /// </summary>
- /// <returns></returns>
- public bool IsConnectedToInternet()
- {
- int Desc = 0;
- return InternetGetConnectedState(Desc, 0);
- }
- /// <summary>
- /// 获取MAC地址
- /// </summary>
- public string GetMACAddress()
- {
- //得到 MAC的注册表键
- RegistryKey macRegistry = Registry.LocalMachine.OpenSubKey("SYSTEM").OpenSubKey("CurrentControlSet").OpenSubKey("Control")
- .OpenSubKey("Class").OpenSubKey("{4D36E972-E325-11CE-BFC1-08002bE10318}");
- IList<string> list = macRegistry.GetSubKeyNames().ToList();
- IPGlobalProperties computerProperties = IPGlobalProperties.GetIPGlobalProperties();
- NetworkInterface[] nics = NetworkInterface.GetAllNetworkInterfaces();
- var adapter = nics.First(o => o.Name == "本地连接");
- if (adapter == null)
- return null;
- return string.Empty;
- }
- /// <summary>
- /// 设置MAC地址
- /// </summary>
- /// <param name="newMac"></param>
- public void SetMACAddress(string newMac)
- {
- string macAddress;
- string index = GetAdapterIndex(out macAddress);
- if (index == null)
- return;
- //得到 MAC的注册表键
- RegistryKey macRegistry = Registry.LocalMachine.OpenSubKey("SYSTEM").OpenSubKey("CurrentControlSet").OpenSubKey("Control")
- .OpenSubKey("Class").OpenSubKey("{4D36E972-E325-11CE-BFC1-08002bE10318}").OpenSubKey(index, true);
- if (string.IsNullOrEmpty(newMac))
- {
- macRegistry.DeleteValue("NetworkAddress");
- }
- else
- {
- macRegistry.SetValue("NetworkAddress", newMac);
- macRegistry.OpenSubKey("Ndi", true).OpenSubKey("params", true).OpenSubKey("NetworkAddress", true).SetValue("Default", newMac);
- macRegistry.OpenSubKey("Ndi", true).OpenSubKey("params", true).OpenSubKey("NetworkAddress", true).SetValue("ParamDesc", "Network Address");
- }
- Thread oThread = new Thread(new ThreadStart(ReConnect));//new Thread to ReConnect
- oThread.Start();
- }
- /// <summary>
- /// 重设MAC地址
- /// </summary>
- public void ResetMACAddress()
- {
- SetMACAddress(string.Empty);
- }
- /// <summary>
- /// 重新连接
- /// </summary>
- private void ReConnect()
- {
- NetSharingManagerClass netSharingMgr = new NetSharingManagerClass();
- INetSharingEveryConnectionCollection connections = netSharingMgr.EnumEveryConnection;
- foreach (INetConnection connection in connections)
- {
- INetConnectionProps connProps = netSharingMgr.get_NetConnectionProps(connection);
- if (connProps.MediaType == tagNETCON_MEDIATYPE.NCM_LAN)
- {
- connection.Disconnect(); //禁用网络
- connection.Connect(); //启用网络
- }
- }
- }
- /// <summary>
- /// 生成随机MAC地址
- /// </summary>
- /// <returns></returns>
- public string CreateNewMacAddress()
- {
- //return "0016D3B5C493";
- int min = 0;
- int max = 16;
- Random ro = new Random();
- var sn = string.Format("{0}{1}{2}{3}{4}{5}{6}{7}{8}{9}{10}{11}",
- ro.Next(min, max).ToString("x"),//0
- ro.Next(min, max).ToString("x"),//
- ro.Next(min, max).ToString("x"),
- ro.Next(min, max).ToString("x"),
- ro.Next(min, max).ToString("x"),
- ro.Next(min, max).ToString("x"),//5
- ro.Next(min, max).ToString("x"),
- ro.Next(min, max).ToString("x"),
- ro.Next(min, max).ToString("x"),
- ro.Next(min, max).ToString("x"),
- ro.Next(min, max).ToString("x"),//10
- ro.Next(min, max).ToString("x")
- ).ToUpper();
- return sn;
- }
- /// <summary>
- /// 得到Mac地址及注册表对应Index
- /// </summary>
- /// <param name="macAddress"></param>
- /// <returns></returns>
- public string GetAdapterIndex(out string macAddress)
- {
- ManagementClass oMClass = new ManagementClass("Win32_NetworkAdapterConfiguration");
- ManagementObjectCollection colMObj = oMClass.GetInstances();
- macAddress = string.Empty;
- int indexString = 1;
- foreach (ManagementObject objMO in colMObj)
- {
- indexString++;
- if (objMO["MacAddress"] != null && (bool)objMO["IPEnabled"] == true)
- {
- macAddress = objMO["MacAddress"].ToString().Replace(":", "");
- break;
- }
- }
- if (macAddress == string.Empty)
- return null;
- else
- return indexString.ToString().PadLeft(4, '0');
- }
- #region Temp
- public void noting()
- {
- //ManagementClass oMClass = new ManagementClass("Win32_NetworkAdapterConfiguration");
- ManagementClass oMClass = new ManagementClass("Win32_NetworkAdapter");
- ManagementObjectCollection colMObj = oMClass.GetInstances();
- foreach (ManagementObject objMO in colMObj)
- {
- if (objMO["MacAddress"] != null)
- {
- if (objMO["Name"] != null)
- {
- //objMO.InvokeMethod("Reset", null);
- objMO.InvokeMethod("Disable", null);//Vista only
- objMO.InvokeMethod("Enable", null);//Vista only
- }
- //if ((bool)objMO["IPEnabled"] == true)
- //{
- // //Console.WriteLine(objMO["MacAddress"].ToString());
- // //objMO.SetPropertyValue("MacAddress", CreateNewMacAddress());
- // //objMO["MacAddress"] = CreateNewMacAddress();
- // //objMO.InvokeMethod("Disable", null);
- // //objMO.InvokeMethod("Enable", null);
- // //objMO.Path.ReleaseDHCPLease();
- // var iObj = objMO.GetMethodParameters("EnableDHCP");
- // var oObj = objMO.InvokeMethod("ReleaseDHCPLease", null, null);
- // Thread.Sleep(100);
- // objMO.InvokeMethod("RenewDHCPLease", null, null);
- //}
- }
- }
- }
- public void no()
- {
- Shell32.Folder networkConnectionsFolder = GetNetworkConnectionsFolder();
- if (networkConnectionsFolder == null)
- {
- Console.WriteLine("Network connections folder not found.");
- return;
- }
- Shell32.FolderItem2 networkConnection = GetNetworkConnection(networkConnectionsFolder, string.Empty);
- if (networkConnection == null)
- {
- Console.WriteLine("Network connection not found.");
- return;
- }
- Shell32.FolderItemVerb verb;
- try
- {
- IsNetworkConnectionEnabled(networkConnection, out verb);
- verb.DoIt();
- Thread.Sleep(1000);
- IsNetworkConnectionEnabled(networkConnection, out verb);
- verb.DoIt();
- }
- catch (ArgumentException ex)
- {
- Console.WriteLine(ex.Message);
- }
- }
- /// <summary>
- /// Gets the Network Connections folder in the control panel.
- /// </summary>
- /// <returns>The Folder for the Network Connections folder, or null if it was not found.</returns>
- static Shell32.Folder GetNetworkConnectionsFolder()
- {
- Shell32.Shell sh = new Shell32.Shell();
- Shell32.Folder controlPanel = sh.NameSpace(3); // Control panel
- Shell32.FolderItems items = controlPanel.Items();
- foreach (Shell32.FolderItem item in items)
- {
- if (item.Name == "网络连接")
- return (Shell32.Folder)item.GetFolder;
- }
- return null;
- }
- /// <summary>
- /// Gets the network connection with the specified name from the specified shell folder.
- /// </summary>
- /// <param name="networkConnectionsFolder">The Network Connections folder.</param>
- /// <param name="connectionName">The name of the network connection.</param>
- /// <returns>The FolderItem for the network connection, or null if it was not found.</returns>
- static Shell32.FolderItem2 GetNetworkConnection(Shell32.Folder networkConnectionsFolder, string connectionName)
- {
- Shell32.FolderItems items = networkConnectionsFolder.Items();
- foreach (Shell32.FolderItem2 item in items)
- {
- if (item.Name == "本地连接")
- {
- return item;
- }
- }
- return null;
- }
- /// <summary>
- /// Gets whether or not the network connection is enabled and the command to enable/disable it.
- /// </summary>
- /// <param name="networkConnection">The network connection to check.</param>
- /// <param name="enableDisableVerb">On return, receives the verb used to enable or disable the connection.</param>
- /// <returns>True if the connection is enabled, false if it is disabled.</returns>
- static bool IsNetworkConnectionEnabled(Shell32.FolderItem2 networkConnection, out Shell32.FolderItemVerb enableDisableVerb)
- {
- Shell32.FolderItemVerbs verbs = networkConnection.Verbs();
- foreach (Shell32.FolderItemVerb verb in verbs)
- {
- if (verb.Name == "启用(&A)")
- {
- enableDisableVerb = verb;
- return false;
- }
- else if (verb.Name == "停用(&B)")
- {
- enableDisableVerb = verb;
- return true;
- }
- }
- throw new ArgumentException("No enable or disable verb found.");
- }
- #endregion
- }
- }
Mac地址自动生成器核心处理类相关推荐
- 自动更改mac地址 ip计算机名的软件,根据MAC地址自动更改计算机名IP的批处理
根据MAC地址自动更改计算机名IP的批处理 根据MAC地址自动更改计算机名IP的批处理 一些错误信息的解决方法: 1.C:\>wmic path win32_pnpsigneddriver 节点 ...
- 【瑞芯微Rockchip Linux平台】SoftAp需求实现(3)动态获取BT Mac地址并更新beacon帧中的mac信息
[瑞芯微Rockchip Linux平台]SoftAp需求实现(3)动态获取BT Mac地址并更新beacon帧中的mac信息 1. 获取本机的蓝牙mac地址 __get_bt_mac_addr() ...
- 华为数通笔记-MAC地址
MAC简介 MAC基本概念 MAC(Media Access Control)地址用来定义网络设备的位置.MAC地址由48比特长.12位的16进制数字组成,其中从左到右开始,0到23bit是厂商向IE ...
- linux绑定ip mac地址,dhcpd mac地址绑定ip地址
今天突然想起,之前的cobbler装系统还是有些不足之处: 用koan装完系统之后还是需要再次手动配置一遍ip地址,感觉还是不太方便,所以研究了下dhcp的另一个功能,就是根据mac地址自动分配固定的 ...
- 启明云端分享|sigmastar SSD201/ssd202核心板升级参考,可实现开机自动从 SD 卡升级固件或开机自动从 SD 卡烧录 MAC 地址
实现功能 1.开机自动从 SD 卡升级固件: 2.开机自动从 SD 卡烧录 MAC 地址: 一.实现方法 自动升级固件 示例:# vi project/image/configs/i2m/script ...
- linux脚本怎么把文件地址变成动态地址,Linux脚本程序自动修改网卡配置文件中的MAC地址...
在玩Linux虚拟机的时候,一个安装好linux系统的virtual HDD会用于创建多个虚拟机,这样就不需要在创建每个虚拟机都安装一遍系统了.virtual HDD加载到虚拟机后,新的虚拟机的MAC ...
- linux脚本自动修改网卡,Linux脚本程序自动修改网卡配置文件中的MAC地址
在玩Linux虚拟机的时候,一个安装好linux系统的virtual HDD会用于创建多个虚拟机,这样就不需要在创建每个虚拟机都安装一遍系统了.virtual HDD加载到虚拟机后,新的虚拟机的MAC ...
- 启明云端分享|SSD201_自动升级固件与烧录MAC地址
实现功能 1.开机自动从SD卡升级固件: 2.开机自动从SD卡烧录MAC地址: 实现方法 自动升级固件 vi project/image/configs/i2m/script_nand.mk @ech ...
- java自动获取ip_java自动获取电脑ip和MAC地址
java自动获取电脑ip和MAC地址 利用getLocalHost获得计算机名称和ip getByInetAddress可以确定一个IP地址属于哪一个网络接口,这个IP地址通过命令行参数传入 用get ...
最新文章
- Asp.Net 使用 GDI+ 绘制3D饼图入门篇源码
- 5 修改request对象变量_【总结】前端5大常见设计模式,代码一看你就懂!
- 寒冰linux视频教程笔记8 系统监控
- msm8909相关事宜
- 王牌之作 特斯拉国产Model Y明年初下线
- 插入区间Python解法
- Linux工作笔记-根据PID查询进程是否存在(进程管理相关程序中常用)
- Python如何在循环语句中加入两个变量_Python基础知识
- kotlin之高阶函数
- 整数规划 Integer Programming 是什么
- HTML 标签的 target 属性
- 《威胁建模:设计和交付更安全的软件》——3.11 小结
- 电脑上没有iis组件,怎么才能安装iis?
- P2P中DHT网络介绍
- 华为手机信息不弹屏了为什么_华为手机顶部消息弹窗怎么关闭?
- 每天一个小技巧(新建桌面)
- ios播放器横竖屏切换的问题
- Android扫一扫 有仿微信版
- 数据库原理与技术(专升本)-含答案
- 大数据导论答案_2020高校邦《数据科学与大数据技术导论》课后作业答案
热门文章
- java实现fcfs_模拟实现FCFS(先来先服务)算法
- 穷人冲冲冲:为什么总是“坏人”赚钱?
- UOS如何添加window字体或者非商业字体
- DHCP静态绑定和ARP静态绑定
- VS插件_Supercharger_Magic Comments_Seperator Lines 增加分割线
- SpringCloud04-Ribbon、OpenFeign、Hystrix
- 怎么把PPT文件转换成Word?这样转换轻松办到
- 海外服务器受到攻击如何增加防御
- ECharts——条形图
- SQLserver中建立外键时显示引用了无效的表