0. 前言
正常情况下,如果想要查看电脑的网卡IP地址或是MAC地址,直接通过界面找到网卡进行查看就有了,亦或是通过命令如linux的ifconfig得到IP等信息,那么本节教大家如何通过python的方式获取网卡的IP/MAC信息。
1. 测试环境及关键代码解释
1.1 测试环境
1.1.1 系统:
Ubuntu 16.04.6 LTS Windows 10 x64
1.1.2 开发工具:
pycharm 专业版 备注:专业版支持本地远程linux调试。
2. 模块介绍及演示
本次只需要用到3个模块就搞定,但也是挺费劲的咯。
- netifaces //需要安装,主要用于获取网卡接口IP/MAC等信息;
- winreg //内置模块,主要用于Windows系统通过注册表获取网卡接口键值;
- platform //内置模块,主要用于判断系统类型:如Widows、Linux、MacOS等;
2.1 platform模块使用示例
Linux系统:
import platform platform.system() 'Linux' #返回结果
Windows系统:
import platform platform.system() 'Windows' #返回结果
2.2 netifaces模块使用示例
外置模块,安装方式请参考网上,此处忽略(很简单)。
用处:用于收集网络接口等信息(IP/地址/网关)。
netiface模块定了3个函数:
def gateways(*args, **kwargs): #获取网关 代码块 def ifaddresses(*args, **kwargs): #获取IP信息 代码块 def interfaces(*args, **kwargs): #获取接口ID 代码块
先看下地址族:
#!/usr/bin/env python3 #-*- coding:UTF-8 -*- #欢迎关注微信公众号:点滴技术 #以下在Linux环境下演示 from netifaces import pprint pp = pprint.PrettyPrinter(indent=4) #这里使用pprint输出会更直观 pp.pprint(netifaces.address_families) #返回结果: { 0: 'AF_UNSPEC', 1: 'AF_FILE', 2: 'AF_INET', #ipv4地址 3: 'AF_AX25', 4: 'AF_IPX', 5: 'AF_APPLETALK', 6: 'AF_NETROM', 7: 'AF_BRIDGE', 8: 'AF_ATMPVC', 9: 'AF_X25', 10: 'AF_INET6', #ipv6地址 11: 'AF_ROSE', 12: 'AF_DECnet', 13: 'AF_NETBEUI', 14: 'AF_SECURITY', 15: 'AF_KEY', 16: <span style="color:transparent">来1源gaodai#ma#com搞*代#码1网</span>'AF_NETLINK', 17: 'AF_PACKET', #ipv4的MAC地址 18: 'AF_ASH', 19: 'AF_ECONET', 20: 'AF_ATMSVC', 22: 'AF_SNA', 23: 'AF_IRDA', 24: 'AF_PPPOX', 25: 'AF_WANPIPE', 31: 'AF_BLUETOOTH'} #这里大家重点关注下:AF_NET、AF_NET6 #其他的大家自己去研究下
2.2.1 Linux环境下如何获取网卡口的信息
#!/usr/bin/env python3 #-*- coding:UTF-8 -*- #欢迎关注微信公众号:点滴技术 import netifaces import pprint pp = pprint.PrettyPrinter(indent=4) netifaces.interfaces() ['lo', 'ens32'] #返回结果,ubuntu系统网卡ID pp.pprint(netifaces.ifaddresses('ens32')) #返回结果,是一个字典,字典中又嵌套列表,所以切片的时候要注意 { 2: [ { 'addr': '192.168.0.253', 'broadcast': '192.168.0.255', 'netmask': '255.255.255.0'}], 10: [ { 'addr': 'fe80::20c:29ff:fe5d:2f55%ens32', 'netmask': 'ffff:ffff:ffff:ffff::/64'}], 17: [{'addr': '00:0c:29:5d:2f:55', 'broadcast': 'ff:ff:ff:ff:ff:ff'}]} netifaces.ifaddresses('ens32')[netifaces.AF_INET][0]['addr'] '192.168.0.253' #返回结果,获取到IPv4地址 netifaces.ifaddresses('ens32')[netifaces.AF_PACKET][0]['addr'] '00:0c:29:5d:2f:55' #返回结果,获取到IPv4的MAC地址 netifaces.ifaddresses('ens32')[netifaces.AF_INET6][0]['addr'] 'fe80::20c:29ff:fe5d:2f55%ens32' #返回结果,获取到IPv6地址