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

 更新时间:2021年05月10日 09:10:11   作者:格洛米爱学习  
这篇文章主要介绍了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的slice notation的特殊用法详解

    python的slice notation的特殊用法详解

    今天小编就为大家分享一篇python的slice notation的特殊用法详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • Python列表list操作相关知识小结

    Python列表list操作相关知识小结

    今天,本喵带大家仔细温习一下Python的列表,温故而知新,不亦说乎,需要的朋友可以参考下
    2020-01-01
  • python+opencv实现移动侦测(帧差法)

    python+opencv实现移动侦测(帧差法)

    这篇文章主要为大家详细介绍了python+opencv实现移动侦测,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-03-03
  • Python IDE Pycharm中的快捷键列表用法

    Python IDE Pycharm中的快捷键列表用法

    在本篇文章里小编给大家整理的是关于Python IDE Pycharm中的快捷键列表用法,需要的朋友们收藏下
    2019-08-08
  • 详解Python3中的Sequence type的使用

    详解Python3中的Sequence type的使用

    这篇文章主要介绍了详解Python3中的Sequence type的使用,是Python入门学习中的基础知识,需要的朋友可以参考下
    2015-08-08
  • python处理两种分隔符的数据集方法

    python处理两种分隔符的数据集方法

    今天小编就为大家分享一篇python处理两种分隔符的数据集方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-12-12
  • python实现登录与注册系统

    python实现登录与注册系统

    这篇文章主要为大家详细介绍了python实现登录与注册系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-11-11
  • python Pandas中数据的合并与分组聚合

    python Pandas中数据的合并与分组聚合

    大家好,本篇文章主要讲的是python Pandas中数据的合并与分组聚合,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-01-01
  • python实现自动更换ip的方法

    python实现自动更换ip的方法

    这篇文章主要介绍了python实现自动更换ip的方法,涉及Python针对本机网络配置的相关操作技巧,非常具有实用价值,需要的朋友可以参考下
    2015-05-05
  • 基于Keras中Conv1D和Conv2D的区别说明

    基于Keras中Conv1D和Conv2D的区别说明

    这篇文章主要介绍了基于Keras中Conv1D和Conv2D的区别说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-06-06

最新评论