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地址内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Django分页查询并返回jsons数据(中文乱码解决方法)
这篇文章主要介绍了Django分页查询并返回jsons数据(中文乱码解决方法),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧2018-08-08python使用xlrd和xlwt读写Excel文件的实例代码
这篇文章主要介绍了python使用xlrd和xlwt读写Excel文件的实例代码,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下2018-09-09Python将Excel表格按某列拆分为多个sheet实现过程
这篇文章主要为大家介绍了Python实现将Excel表格按某列拆分为多个sheet,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2023-05-05pandas dataframe拼接后index重新排序方式
这篇文章主要介绍了pandas dataframe拼接后index重新排序方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2023-10-10Visual Studio code 配置Python开发环境
这篇文章主要介绍了Visual Studio code 配置Python开发环境,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2020-09-09
最新评论