C# 以编程方式欺骗MAC ID
我试图以编程方式更改系统MAC ID,并使用以下代码,但它不能作为C# 以编程方式欺骗MAC ID,c#,mac-address,C#,Mac Address,我试图以编程方式更改系统MAC ID,并使用以下代码,但它不能作为RegistryKey=bkey工作。OpenSubKey(Constants.baseReg+nicid)为空。 如何解决此问题。我正在运行Win7 64位操作系统,如果这很重要的话 还有public const string baseReg=@“SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}” 和nicid=第一个网络适
RegistryKey=bkey工作。OpenSubKey(Constants.baseReg+nicid)
为空。
如何解决此问题。我正在运行Win7 64位操作系统,如果这很重要的话
还有public const string baseReg=@“SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}”代码>
和nicid=第一个网络适配器的当前mac ID
public static bool SetMAC(string nicid, string newmac)
{
bool ret = false;
using (RegistryKey bkey = GetBaseKey())
using (RegistryKey key = bkey.OpenSubKey(Constants.baseReg + nicid))
{
if (key != null)
{
key.SetValue("NetworkAddress", newmac, RegistryValueKind.String);
ManagementObjectSearcher mos = new ManagementObjectSearcher(
new SelectQuery("SELECT * FROM Win32_NetworkAdapter WHERE Index = " + nicid));
foreach (ManagementObject o in mos.Get().OfType<ManagementObject>())
{
o.InvokeMethod("Disable", null);
o.InvokeMethod("Enable", null);
ret = true;
}
}
}
publicstaticboolsetmac(字符串nicid,字符串newmac)
{
bool-ret=假;
使用(RegistryKey bkey=GetBaseKey())
使用(RegistryKey=bkey.OpenSubKey(Constants.baseReg+nicid))
{
if(key!=null)
{
key.SetValue(“NetworkAddress”,newmac,RegistryValueKind.String);
ManagementObjectSearcher mos=新的ManagementObjectSearcher(
新建SelectQuery(“从Win32_NetworkAdapter中选择*,其中Index=“+nicid”);
foreach(类型()的mos.Get()中的ManagementObject o)
{
o、 InvokeMethod(“禁用”,null);
o、 InvokeMethod(“Enable”,null);
ret=真;
}
}
}
因此,经过数小时的挖掘和浏览,我解决了这个问题。
另一方面,这个适配器有一个问题,它只使用ActiveAdapterMAC列表中的第一个适配器
PSS-这段代码不是最好的,我也有一些修正要做。但我相信这会让你走上正确的方向。
下面是获取当前活动网络适配器NICID的代码,然后使用该代码设置MAC ID
public static void GetAllNetworkAdapters()
{
NetworkInterface[] adapters = NetworkInterface.GetAllNetworkInterfaces();
foreach (NetworkInterface adapter in adapters.Where(a => a.OperationalStatus == OperationalStatus.Up))
{
ActiveAdapters.Add(adapter.Id);
string MAC = adapter.GetPhysicalAddress().ToString();
ActiveAdapterMAC.Add(MAC);
Logger.LogGenericText($"Adapter Properties => {adapter.Id} / {MAC}");
}
}
public static string GetSubKeyValue()
{
RegistryKey Base = GetBaseKey();
RegistryKey Key = Base.OpenSubKey(@"SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318}", true);
string SelectedKey = null;
string[] Values = Key.GetSubKeyNames();
try
{
foreach (var key in Values)
{
RegistryKey ValueChecker = Base.OpenSubKey(Constants.baseReg + key, true);
string NetCFID = ValueChecker.GetValue("NetCfgInstanceId").ToString();
if (NetCFID == ActiveAdapters[0])
{
SelectedKey = key;
}
ValueChecker.Close();
}
}
catch(Exception ex)
{
if(ex is SecurityException)
{
Key.Close();
return SelectedKey;
}
}
Key.Close();
return SelectedKey;
}
public static void ConfigMAC(bool Reset = false, bool RegisterDefault = false)
{
RegistryKey Base = GetBaseKey();
string NICID = GetSubKeyValue();
string NewMAC = GenerateMACAddress();
CachedNICID = NICID;
if (Config.WifiConnection)
{
NewMAC = GetRandomWifiMacAddress();
}
if (RegisterDefault)
{
string CurrentMAC = GetMacIDWithCache();
Constants.CurrentMACID = CurrentMAC;
try
{
RegistryKey RegisterKey = Base.OpenSubKey(Constants.baseReg + NICID, true);
if (RegisterKey.GetValue(Constants.DefaultMAC) != null)
{
RegisterKey.Close();
return;
}
else
{
RegisterKey.SetValue(Constants.DefaultMAC, CurrentMAC);
RegisterKey.Close();
return;
}
}
catch (Exception ex)
{
Logger.LogGenericText(ex.ToString());
return;
}
}
if (Reset)
{
DeleteKey(NICID, true);
return;
}
Logger.LogGenericText("Opening Sub Key => " + Constants.baseReg + NICID);
RegistryKey Key = Base.OpenSubKey(Constants.baseReg + NICID, true);
string[] KeyValues = Key.GetValueNames();
if (!KeyValues.Contains(Constants.MacValue))
{
Key.SetValue(Constants.MacValue, NewMAC);
Logger.LogGenericText("Value Set for " + Constants.MacValue + " as " + NewMAC);
Constants.CurrentMACID = NewMAC;
Task.Run(() => ResetAdapter(NICID));
}
else
{
DeleteKey(NICID, false);
Key.SetValue(Constants.MacValue, NewMAC);
Logger.LogGenericText("Value Set for " + Constants.MacValue + " as " + NewMAC);
Constants.CurrentMACID = NewMAC;
Task.Run(() => ResetAdapter(NICID));
}
Key.Close();
}
public static void DeleteKey(string Nicid, bool Restart)
{
Logger.LogGenericText("Deleting Previous Changed MAC...");
RegistryKey Base = GetBaseKey();
RegistryKey ResetKey = Base.OpenSubKey(Constants.baseReg + Nicid, true);
ResetKey.DeleteValue(Constants.MacValue);
ResetKey.Close();
if (Restart)
{
Task.Run(() => ResetAdapter(Nicid));
return;
}
else
{
return;
}
}
public static void ResetAdapter(string Nicid)
{
ManagementObjectSearcher mos = new ManagementObjectSearcher
(new SelectQuery("SELECT * FROM Win32_NetworkAdapter WHERE Index = " + Nicid));
foreach (ManagementObject o in mos.Get().OfType<ManagementObject>())
{
Logger.LogGenericText("Disabling Adapter and Waiting for 6 Seconds.");
o.InvokeMethod("Disable", null);
Task.Delay(6000).Wait();
o.InvokeMethod("Enable", null);
Logger.LogGenericText("New MAC ID Set Sucessfully!");
}
}
publicstaticvoid GetAllNetworkAdapters()
{
NetworkInterface[]适配器=NetworkInterface.GetAllNetworkInterfaces();
foreach(适配器中的NetworkInterface适配器,其中(a=>a.OperationalStatus==OperationalStatus.Up))
{
添加(adapter.Id);
字符串MAC=adapter.GetPhysicalAddress().ToString();
ActiveAdapterMAC.Add(MAC);
LogGenericText($“适配器属性=>{Adapter.Id}/{MAC}”);
}
}
公共静态字符串GetSubKeyValue()
{
RegistryKey Base=GetBaseKey();
RegistryKey Key=Base.OpenSubKey(@“SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318}),true);
字符串SelectedKey=null;
字符串[]值=Key.GetSubKeyNames();
尝试
{
foreach(变量输入值)
{
RegistryKey ValueChecker=Base.OpenSubKey(Constants.baseReg+key,true);
字符串NetCFID=ValueChecker.GetValue(“NetCfgInstanceId”).ToString();
if(NetCFID==ActiveAdapters[0])
{
SelectedKey=key;
}
ValueChecker.Close();
}
}
捕获(例外情况除外)
{
如果(ex是SecurityException)
{
Key.Close();
返回SelectedKey;
}
}
Key.Close();
返回SelectedKey;
}
公共静态void ConfigMAC(bool Reset=false,bool RegisterDefault=false)
{
RegistryKey Base=GetBaseKey();
字符串NICID=GetSubKeyValue();
字符串NewMAC=GenerateMACAddress();
CachedNICID=NICID;
如果(配置WifiConnection)
{
NewMAC=GetRandomWifiMacAddress();
}
if(RegisterDefault)
{
字符串CurrentMAC=GetMacIDWithCache();
Constants.CurrentMACID=CurrentMAC;
尝试
{
RegistryKey RegisterKey=Base.OpenSubKey(Constants.baseReg+NICID,true);
if(RegisterKey.GetValue(Constants.DefaultMAC)!=null)
{
RegisterKey.Close();
回来
}
其他的
{
RegisterKey.SetValue(Constants.DefaultMAC、CurrentMAC);
RegisterKey.Close();
回来
}
}
捕获(例外情况除外)
{
LogGenericText(例如ToString());
回来
}
}
如果(重置)
{
DeleteKey(NICID,true);
回来
}
LogGenericText(“打开子键=>”+Constants.baseReg+NICID);
注册表项Key=Base.OpenSubKey(Constants.baseReg+NICID,true);
字符串[]KeyValues=Key.GetValueNames();
如果(!KeyValues.Contains(Constants.MacValue))
{
Key.SetValue(Constants.MacValue,NewMAC);
Logger.LogGenericText(“为“+Constants.MacValue+”设置的值为“+NewMAC”);
Constants.CurrentMACID=NewMAC;
运行(()=>ResetAdapter(NICID));
}
其他的
{
DeleteKey(NICID,false);
Key.SetValue(Constants.MacValue,NewMAC);
Logger.LogGenericText(“为“+Constants.MacValue+”设置的值为“+NewMAC”);
Constants.CurrentMACID=NewMAC;
运行(()=>ResetAdapter(NICID));
}
Key.Close();
}
公共静态void DeleteKey(字符串Nicid,bool Restart)
{
LogGenericText(“删除以前更改的MAC…”);
RegistryKey Base=GetBaseKey();
RegistryKey ResetKey=Base.OpenSubKey(Constants.baseReg+Nicid,true);
ResetKey.DeleteValue(Constants.MacValue);
ResetKey.Close();
如果(重新启动)
{
运行(()=>ResetAdapter(Nicid));
回来
}
其他的
{
回来
}
}
公共静态无效重置适配器(字符串Nicid)
{
ManagementObjectSearcher mos=新的ManagementObjectJEC