• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    python获取linux和windows系统指定接口的IP地址的步骤及代码

    实验目的:

    用户输入网卡名称,通过函数返回对应的IPv4和IPv6地址。

    实验代码:

    步骤一: 由于window系统下网卡名称并不是真正的名字,而真正的ID在注册表SYSTEM\CurrentControlSet\Control\Network{4d36e972-e325-11ce-bfc1-08002be10318}目录下。所以需要通过如下代码,返回接口名称和唯一ID的对应关系。

    win_ifname.py:

    import netifaces as ni
    # import winreg as wr
    
    # 将windows下的接口的名称和唯一ID一一对应存入字典并返回
    def get_connection_name_from_guid(iface_guids):  
        wr = __import__('winreg', globals(), locals(), ['wr'])
        iface_dict = {}
        reg = wr.ConnectRegistry(None, wr.HKEY_LOCAL_MACHINE)
        reg_key = wr.OpenKey(reg, r'SYSTEM\CurrentControlSet\Control\Network\{4d36e972-e325-11ce-bfc1-08002be10318}')
    
        for i in iface_guids:
            try:
                reg_subkey = wr.OpenKey(reg_key, i + r'\Connection')
                iface_dict[wr.QueryValueEx(reg_subkey, 'Name')[0]] = i
            except FileNotFoundError:
                pass
        return iface_dict
    
     # 根据输入的接口名称,返回唯一ID
    def win_from_name_get_id(ifname): 
        x = ni.interfaces()
        return get_connection_name_from_guid(x).get(ifname)
    
    
    if __name__ == '__main__':
        import platform
    
        if platform.system() == "Windows":
            print(win_from_name_get_id("WLAN"))

    运行结果:

    可以看到获取WLAN接口的ID和注册表中查看的一致。

    步骤二: 通过接口名称(linux)或者接口ID(windows)找到IPv4和IPv6地址。

    from netifaces import ifaddresses, AF_INET, AF_INET6
    import platform
    
    # 获取接口IPv4地址
    def get_ip_address(ifname):
        if platform.system() == "Linux":
            try:
            	# AF_INET表示的是IPv4地址(AF_LINK则表示的是MAC地址)
                return ifaddresses(ifname)[AF_INET][0]['addr']
            except ValueError:
                return None
        elif platform.system() == "Windows":
        	# 需要首先调用win_from_name_get_id函数,获取接口的ID
            from win_ifname import win_from_name_get_id
            if_id = win_from_name_get_id(ifname)
            if not if_id:
                return
            else:
                return ifaddresses(if_id)[AF_INET][0]['addr']
        else:
            print('操作系统不支持,本脚本只能工作在Windows或者Linux环境!')
    
    # 获取接口IPv6地址,和IPv4同理
    def get_ipv6_address(ifname):
        if platform.system() == "Linux":
            try:
                return ifaddresses(ifname)[AF_INET6][0]['addr']
            except ValueError:
                return None
        elif platform.system() == "Windows":
            from win_ifname import win_from_name_get_id
            if_id = win_from_name_get_id(ifname)
            if not if_id:
                return
            else:
                # 此处依然要提供WIN的网卡ID, 而不是名字
                return ifaddresses(if_id)[AF_INET6][0]['addr']
        else:
            print('操作系统不支持,本脚本只能工作在Windows或者Linux环境!')
    
    
    if __name__ == "__main__":
        if platform.system() == "Linux":
            print(get_ip_address('ens33'))
            print(get_ipv6_address('ens33'))
        elif platform.system() == "Windows":
            print(get_ip_address('WLAN'))
            print(get_ipv6_address('WLAN'))

    测试结果:
    windows平台下:

    Linux平台下:

    到此这篇关于python获取linux和windows系统指定接口的IP地址的文章就介绍到这了,更多相关python获取接口ip地址内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    您可能感兴趣的文章:
    • Python脚本激活Linux密码的方法(crypt模块)
    • python渗透测试linux密码激活的示例
    • 聊聊python在linux下与windows下导入模块的区别说明
    • linux centos 7.x 安装 python3.x 替换 python2.x的过程解析
    • 在Linux下使用命令行安装Python
    上一篇:python排序算法的简单实现方法
    下一篇:PyTorch 如何将CIFAR100数据按类标归类保存
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    python获取linux和windows系统指定接口的IP地址的步骤及代码 python,获取,linux,和,windows,