鱼C论坛

 找回密码
 立即注册
查看: 2464|回复: 9

[已解决]有些关于网络的小问题 内详:

[复制链接]
发表于 2023-3-10 14:33:41 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
我的中心思想是  修改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 007  008 都是什么鬼  如何我才能写一个各种windows系统通用的代码
最佳答案
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'][netifaces.AF_INET][1]

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

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

# 关闭注册表键
winreg.CloseKey(key)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-3-10 15:01:13 From FishC Mobile | 显示全部楼层
isdkz 发表于 2023-3-10 14:50
修改Mac地址的方法有两种:

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

我电脑最多有10来个分支,那还需要进行遍历
然后看哪个是自己要的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-3-10 15:20:13 | 显示全部楼层
isdkz 发表于 2023-3-10 14:50
修改Mac地址的方法有两种:

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


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

可是要是用程序来看的话,还是不知道咋回事
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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)[0]):
    # 获取子键名称
    subkey_name = winreg.EnumKey(key, i)
    try:
        # 打开子键
        subkey = winreg.OpenKey(key, subkey_name)
    
        # 尝试获取 DriverDesc 值
        driver_desc = winreg.QueryValueEx(subkey, "DriverDesc")[0]
        # 打印子键名称和 DriverDesc 值
        print(subkey_name, driver_desc)
    except (FileNotFoundError, PermissionError):
        # 如果没有 DriverDesc 值或拒绝访问,跳过
        pass

# 关闭注册表键
winreg.CloseKey(key)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-3-10 15:52:23 From FishC Mobile | 显示全部楼层
isdkz 发表于 2023-3-10 15:39
要找到网卡编号对应的网卡?

可是咋能知道哪个描述是主网卡,还是要用肉眼??
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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'][netifaces.AF_INET][1]

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

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

# 关闭注册表键
winreg.CloseKey(key)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-3-10 18:40:19 From FishC Mobile | 显示全部楼层
isdkz 发表于 2023-3-10 18:17
可以配合 netifaces 这个库

先结贴,完我再研究
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-10 18:48:14 | 显示全部楼层
wp231957 发表于 2023-3-10 18:40
先结贴,完我再研究

好的,我又在代码里加了一个打印网卡名称,你可以根据网卡名称来判断一下获取到的值对不对
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-24 02:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表