如图所示有多个网卡
本地网卡配置了多个IP
class Public_IPOp: @staticmethod def GetLocalIP(): rt = [False] # 根节点 reg_root = win32con.HKEY_LOCAL_MACHINE # 网卡设备键的路径 reg_path = r"SYSTEM\CurrentControlSet\Control\Class\{4d36e972-e325-11ce-bfc1-08002be10318}" # 权限和参数设置 reg_flags = win32con.WRITE_OWNER | win32con.KEY_WOW64_64KEY | win32con.KEY_ALL_ACCESS # 网卡IP信息地址 IP_Path = r"SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces" try: key = win32api.RegOpenKeyEx(reg_root, reg_path, 0, reg_flags) for item in win32api.RegEnumKeyEx(key): # 先判断是否是PCI设备 try: subPath = reg_path + ‘\\‘ + item[0] subkey = win32api.RegOpenKey(reg_root, subPath, 0, reg_flags) except: pass # rt.clear() # rt.append(False) # rt.append(subPath+‘拒绝访问‘) try: if 0 == win32api.RegQueryValueEx(subkey, ‘DeviceInstanceID‘)[0].find(‘PCI‘): # 判断是否是ethernet LowerRangePath = reg_path + ‘\\‘ + item[0] + ‘\\Ndi\\Interfaces‘ LowerRangekey = win32api.RegOpenKey(reg_root, LowerRangePath, 0, reg_flags) if ‘ethernet‘ == win32api.RegQueryValueEx(LowerRangekey, ‘LowerRange‘)[0]: ip_path = IP_Path + ‘\\‘ + win32api.RegQueryValueEx(subkey, ‘NetCfgInstanceId‘)[0] # print(ip_path) IpKey = win32api.RegOpenKey(reg_root, ip_path, 0, reg_flags) if len(win32api.RegQueryValueEx(IpKey, ‘IPAddress‘)) > 0: if len(win32api.RegQueryValueEx(IpKey, ‘IPAddress‘)[0]) > 0: # print(win32api.RegQueryValueEx(IpKey, ‘IPAddress‘)[0][0]) rt.clear() rt.append(True) rt.append(win32api.RegQueryValueEx(IpKey, ‘IPAddress‘)[0][0]) except: pass # rt.clear() # rt.append(False) # rt.append(item[0]+‘系统找不到DeviceInstanceID‘) # 关闭键 win32api.RegCloseKey(key) except Exception as e: rt.clear() rt.append(False) rt.append("注册表拒绝访问,请检查路径%s是否存在或以管理员身份运行" % (reg_path)) return rt
在有多个网卡,配置了多个IP的情况下,python 获取本地网卡的主IP
原文:https://www.cnblogs.com/Summerio/p/11734002.html