首页 > 编程语言 > 详细

在有多个网卡,配置了多个IP的情况下,python 获取本地网卡的主IP

时间:2019-10-24 20:14:48      阅读:282      评论:0      收藏:0      [点我收藏+]

技术分享图片

如图所示有多个网卡

技术分享图片

 

本地网卡配置了多个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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!