wp231957 发表于 2023-3-10 14:33:41

有些关于网络的小问题 内详:

我的中心思想是修改Mac地址,网络上可能有几种方案,但是我实践通过测试的就是我现在的方案(修改注册表)

下面 详见注册表路径:

win10

HKLM\SYSTEM\CURRENTCONTROLSET\CONTROL\CLASS\{4D36E972-E325-11CE-BFC1-08002BE10318}\008

win7

HKLM\SYSTEM\CURRENTCONTROLSET\CONTROL\CLASS\{4D36E972-E325-11CE-BFC1-08002BE10318}\007

winxp

HKLM\SYSTEM\CURRENTCONTROLSET\CONTROL\CLASS\{4D36E972-E325-11CE-BFC1-08002BE10318}\001

现在看来,主路径 直到......0318这都是一样的,可是后面的 001 007008 都是什么鬼如何我才能写一个各种windows系统通用的代码

isdkz 发表于 2023-3-10 14:50:19

修改Mac地址的方法有两种:

一、通过网络适配器属性页面,找到网络地址选项,输入想要修改的Mac地址。

这种方法适用于有线网卡,但无线网卡通常没有网络地址选项。

二、通过注册表编辑器,定位到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\ {4D36E972-E325-11CE-BFC1-08002BE10318}\下的网卡编号(如0001、0003等),

新建字符串值或项,命名为NetworkAddress,内容为想要修改的Mac地址。这种方法适用于无线网卡。

你提到的001、007、008等都是网卡编号,它们代表不同的网络适配器。

你可以通过查看DriverDesc值来确定哪个编号对应哪个网卡。

如果你想了解更多细节,请参考以下链接:

1、https://www.zhihu.com/question/36405648
2、https://blog.csdn.net/qq_34843032/article/details/105208723

wp231957 发表于 2023-3-10 15:01:13

isdkz 发表于 2023-3-10 14:50
修改Mac地址的方法有两种:

一、通过网络适配器属性页面,找到网络地址选项,输入想要修改的Mac地址。


我电脑最多有10来个分支,那还需要进行遍历
然后看哪个是自己要的

wp231957 发表于 2023-3-10 15:20:13

isdkz 发表于 2023-3-10 14:50
修改Mac地址的方法有两种:

一、通过网络适配器属性页面,找到网络地址选项,输入想要修改的Mac地址。


刚才回复一个被后台给吃了,
查看DriverDesc的值,我们用肉眼可以判断这个网卡就是我们的主网卡,就是我们要找的东东

可是要是用程序来看的话,还是不知道咋回事

isdkz 发表于 2023-3-10 15:39:42

wp231957 发表于 2023-3-10 15:20
刚才回复一个被后台给吃了,
查看DriverDesc的值,我们用肉眼可以判断这个网卡就是我们的主网卡, ...

要找到网卡编号对应的网卡?

import winreg

# 打开注册表键
key = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, "SYSTEM\\CurrentControlSet\\Control\\Class\\{4d36e972-e325-11ce-bfc1-08002be10318}")

# 遍历所有子键
for i in range(winreg.QueryInfoKey(key)):
    # 获取子键名称
    subkey_name = winreg.EnumKey(key, i)
    try:
      # 打开子键
      subkey = winreg.OpenKey(key, subkey_name)
   
      # 尝试获取 DriverDesc 值
      driver_desc = winreg.QueryValueEx(subkey, "DriverDesc")
      # 打印子键名称和 DriverDesc 值
      print(subkey_name, driver_desc)
    except (FileNotFoundError, PermissionError):
      # 如果没有 DriverDesc 值或拒绝访问,跳过
      pass

# 关闭注册表键
winreg.CloseKey(key)

wp231957 发表于 2023-3-10 15:52:23

isdkz 发表于 2023-3-10 15:39
要找到网卡编号对应的网卡?

可是咋能知道哪个描述是主网卡,还是要用肉眼??

isdkz 发表于 2023-3-10 18:17:53

本帖最后由 isdkz 于 2023-3-10 18:44 编辑

wp231957 发表于 2023-3-10 15:52
可是咋能知道哪个描述是主网卡,还是要用肉眼??

可以配合 netifaces 这个库

import winreg
import netifaces

def_gw_device = netifaces.gateways()['default']

# 打开注册表键
key = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, "SYSTEM\\CurrentControlSet\\Control\\Class\\{4d36e972-e325-11ce-bfc1-08002be10318}")

# 遍历所有子键
for i in range(winreg.QueryInfoKey(key)):
    # 获取子键名称
    subkey_name = winreg.EnumKey(key, i)
    try:
      # 打开子键
      subkey = winreg.OpenKey(key, subkey_name)
   
      netCfgInstanceId = winreg.QueryValueEx(subkey, "NetCfgInstanceId")
      driverDesc = winreg.QueryValueEx(subkey, "DriverDesc")
      if netCfgInstanceId == def_gw_device:
            print("当前在使用的网卡编号为:", subkey_name)
            print("网卡名称:", driverDesc)
    except (FileNotFoundError, PermissionError):
      # 如果没有 DriverDesc 值或拒绝访问,跳过
      pass

# 关闭注册表键
winreg.CloseKey(key)

wp231957 发表于 2023-3-10 18:40:19

isdkz 发表于 2023-3-10 18:17
可以配合 netifaces 这个库

先结贴,完我再研究

isdkz 发表于 2023-3-10 18:48:14

wp231957 发表于 2023-3-10 18:40
先结贴,完我再研究

好的,我又在代码里加了一个打印网卡名称,你可以根据网卡名称来判断一下获取到的值对不对
页: [1]
查看完整版本: 有些关于网络的小问题 内详: