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

作者:格洛米爱学习 时间:2023-04-22 08:22:21 

实验目的:

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

实验代码:

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

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

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"))

运行结果:

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

可以看到获取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平台下:

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

Linux平台下:

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

来源:https://blog.csdn.net/tushanpeipei/article/details/116572723

标签:python,接口,ip地址
0
投稿

猜你喜欢

  • 浅论网站用户粘性的提高和增强

    2008-05-15 07:14:00
  • django filter过滤器实现显示某个类型指定字段不同值方式

    2023-06-21 07:48:26
  • ASp使用AspJpeg组件制作透明文字水印

    2008-01-15 20:25:00
  • bootstrap-table组合表头的实现方法

    2024-05-11 09:07:53
  • Go应该如何实现二级缓存

    2024-02-19 17:07:53
  • Python3中关于cookie的创建与保存

    2023-11-29 00:29:22
  • sql 查询慢的原因分析

    2024-01-16 13:11:29
  • SQL Server中ISNULL函数介绍

    2009-09-09 21:23:00
  • Python实现判断一个整数是否为回文数算法示例

    2022-05-13 12:01:07
  • 关于golang监听rabbitmq消息队列任务断线自动重连接的问题

    2024-04-25 13:21:03
  • mysql中的general_log(查询日志)开启和关闭

    2024-01-19 01:49:10
  • Mysql 文件配置解析

    2024-01-26 10:01:54
  • Python基础教程(一)——Windows搭建开发Python开发环境

    2021-06-16 13:41:53
  • python编程实现清理微信重复缓存文件

    2022-06-20 02:12:12
  • javascript实现右下角广告框效果

    2024-04-17 10:25:08
  • python 七种邮件内容发送方法实例

    2022-01-13 21:06:38
  • python如何查看系统网络流量的信息

    2022-11-03 13:54:08
  • mysql出现10061错误解决办法

    2010-07-04 13:36:00
  • Python实现将绝对URL替换成相对URL的方法

    2023-08-28 13:40:08
  • Python 内置变量和函数的查看及说明介绍

    2021-06-11 16:12:14
  • asp之家 网络编程 m.aspxhome.com