Python获取本机所有网卡ip,掩码和广播地址实例代码


Posted in Python onJanuary 22, 2018

本文主要研究的是使用Python获取本机所有网卡ip,掩码和广播地址,分享了相关的实例代码,具体介绍如下。

搜了一天,竟然没找到一段合适的代码来获取机器中所有网卡的ip,掩码和广播地址,大部分都是用socket,但是socket通常返回的要不就是内网地址,要不就是公网地址,不能够找到所有地址,真的太忧桑了,决定自己通过ifconfig或ipconfig的返回信息,一步步地过滤了。这次的代码主要用到了正则表达式和subprocess模块,而且为了兼容所有平台(win,linux和mac),也用到了platform来判断系统类型,不说太多,代码如下:

import subprocess
import re
import platform


def find_all_ip(platform):
 ipstr = '([0-9]{1,3}\.){3}[0-9]{1,3}'
 if platform == "Darwin" or platform == "Linux":
  ipconfig_process = subprocess.Popen("ifconfig", stdout=subprocess.PIPE)
  output = ipconfig_process.stdout.read()
  ip_pattern = re.compile('(inet %s)' % ipstr)
  if platform == "Linux":
   ip_pattern = re.compile('(inet addr:%s)' % ipstr)
  pattern = re.compile(ipstr)
  iplist = []
  for ipaddr in re.finditer(ip_pattern, str(output)):
   ip = pattern.search(ipaddr.group())
   if ip.group() != "127.0.0.1":
    iplist.append(ip.group())
  return iplist
 elif platform == "Windows":
  ipconfig_process = subprocess.Popen("ipconfig", stdout=subprocess.PIPE)
  output = ipconfig_process.stdout.read()
  ip_pattern = re.compile("IPv4 Address(\. )*: %s" % ipstr)
  pattern = re.compile(ipstr)
  iplist = []
  for ipaddr in re.finditer(ip_pattern, str(output)):
   ip = pattern.search(ipaddr.group())
   if ip.group() != "127.0.0.1":
    iplist.append(ip.group())
  return iplist


def find_all_mask(platform):
 ipstr = '([0-9]{1,3}\.){3}[0-9]{1,3}'
 maskstr = '0x([0-9a-f]{8})'
 if platform == "Darwin" or platform == "Linux":
  ipconfig_process = subprocess.Popen("ifconfig", stdout=subprocess.PIPE)
  output = ipconfig_process.stdout.read()
  mask_pattern = re.compile('(netmask %s)' % maskstr)
  pattern = re.compile(maskstr)
  if platform == "Linux":
   mask_pattern = re.compile(r'Mask:%s' % ipstr)
   pattern = re.compile(ipstr)
  masklist = []
  for maskaddr in mask_pattern.finditer(str(output)):
   mask = pattern.search(maskaddr.group())
   if mask.group() != '0xff000000' and mask.group() != '255.0.0.0':
    masklist.append(mask.group())
  return masklist
 elif platform == "Windows":
  ipconfig_process = subprocess.Popen("ipconfig", stdout=subprocess.PIPE)
  output = ipconfig_process.stdout.read()
  mask_pattern = re.compile(r"Subnet Mask (\. )*: %s" % ipstr)
  pattern = re.compile(ipstr)
  masklist = []
  for maskaddr in mask_pattern.finditer(str(output)):
   mask = pattern.search(maskaddr.group())
   if mask.group() != '255.0.0.0':
    masklist.append(mask.group())
  return masklist


def get_broad_addr(ipstr, maskstr):
 iptokens = map(int, ipstr.split("."))
 masktokens = map(int, maskstr.split("."))
 broadlist = []
 for i in range(len(iptokens)):
  ip = iptokens[i]
  mask = masktokens[i]
  broad = ip & mask | (~mask & 255)
  broadlist.append(broad)
 return '.'.join(map(str, broadlist))


def find_all_broad(platform):
 ipstr = '([0-9]{1,3}\.){3}[0-9]{1,3}'
 if platform == "Darwin" or platform == "Linux":
  ipconfig_process = subprocess.Popen("ifconfig", stdout=subprocess.PIPE)
  output = (ipconfig_process.stdout.read())
  broad_pattern = re.compile('(broadcast %s)' % ipstr)
  if platform == "Linux":
   broad_pattern = re.compile(r'Bcast:%s' % ipstr)
  pattern = re.compile(ipstr)
  broadlist = []
  for broadaddr in broad_pattern.finditer(str(output)):
   broad = pattern.search(broadaddr.group())
   broadlist.append(broad.group())
  return broadlist
 elif platform == "Windows":
  iplist = find_all_ip(platform)
  masklist = find_all_mask(platform)
  broadlist = []
  for i in range(len(iplist)):
   broadlist.append(get_broad_addr(iplist[i], masklist[i]))
  return broadlist


system = platform.system()
print(find_all_ip(system))
print(find_all_mask(system))
print(find_all_broad(system))

总结

以上就是本文关于Python获取本机所有网卡ip,掩码和广播地址实例代码的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

Python 相关文章推荐
对于Python中线程问题的简单讲解
Apr 03 Python
Python对多属性的重复数据去重实例
Apr 18 Python
python实现图书馆研习室自动预约功能
Apr 27 Python
python 剪切移动文件的实现代码
Aug 02 Python
python实现录音小程序
Oct 26 Python
Python处理session的方法整理
Aug 29 Python
python OpenCV GrabCut使用实例解析
Nov 11 Python
Python绘制全球疫情变化地图的实例代码
Apr 20 Python
Python闭包与装饰器原理及实例解析
Apr 30 Python
详解python爬取弹幕与数据分析
Nov 14 Python
python中openpyxl和xlsxwriter对Excel的操作方法
Mar 01 Python
详细介绍python类及类的用法
May 31 Python
Linux CentOS7下安装python3 的方法
Jan 21 #Python
简述Python2与Python3的不同点
Jan 21 #Python
手把手教你用python抢票回家过年(代码简单)
Jan 21 #Python
分析Python中解析构建数据知识
Jan 20 #Python
学习Python selenium自动化网页抓取器
Jan 20 #Python
python使用pil库实现图片合成实例代码
Jan 20 #Python
python方向键控制上下左右代码
Jan 20 #Python
You might like
Uncaught exception com_exception with message Failed to create COM object
2012/01/11 PHP
基于PHP导出Excel的小经验 完美解决乱码问题
2013/06/10 PHP
destoon常用的安全设置概述
2014/06/21 PHP
Yii2实现自定义独立验证器的方法
2017/05/05 PHP
php中各种定义变量的方法小结
2017/10/18 PHP
PHP读取Excel内的图片(phpspreadsheet和PHPExcel扩展库)
2019/11/19 PHP
PHP连接MySQL数据库操作代码实例解析
2020/07/11 PHP
非常好的js代码
2006/06/27 Javascript
EXTjs4.0的store的findRecord的BUG演示代码
2013/06/08 Javascript
基于JavaScript的操作系统你听说过吗?
2016/01/28 Javascript
jQuery实现右下角可缩放大小的层完整实例
2016/06/20 Javascript
jquery html5 视频播放控制代码
2016/11/06 Javascript
elemetUi 组件--el-upload实现上传Excel文件的实例
2017/10/27 Javascript
JQ图片文件上传之前预览功能的简单实例(分享)
2017/11/12 Javascript
利用jqprint插件打印页面内容的实现方法
2018/01/09 Javascript
js取0-9随机取4个数不重复的数字代码实例
2019/03/27 Javascript
[03:04]2018年度DOTA2玩家最喜爱的主播-完美盛典
2018/12/16 DOTA
Python编程实现微信企业号文本消息推送功能示例
2017/08/21 Python
Python实现的计算器功能示例
2018/04/26 Python
python利用ffmpeg进行录制屏幕的方法
2019/01/10 Python
如何基于Python批量下载音乐
2019/11/11 Python
Python 文件数据读写的具体实现
2020/01/24 Python
Python转换itertools.chain对象为数组的方法
2020/02/07 Python
基于Pytorch SSD模型分析
2020/02/18 Python
Python轻量级web框架bottle使用方法解析
2020/06/13 Python
Selenium alert 弹窗处理的示例代码
2020/08/06 Python
HTML5 manifest离线缓存的示例代码
2018/08/08 HTML / CSS
JoJo Maman Bébé爱尔兰官网:英国最受欢迎的精品母婴品牌
2020/12/20 全球购物
银行自荐信范文
2013/10/07 职场文书
公司同意接收函
2014/01/13 职场文书
残疾人创业典型事迹
2014/02/01 职场文书
单位考核聘任报告
2015/03/02 职场文书
2015年员工工作总结范文
2015/04/08 职场文书
2016年小学教师政治学习心得体会
2016/01/23 职场文书
技术转让协议书
2016/03/19 职场文书
Python Pandas pandas.read_sql_query函数实例用法分析
2021/06/21 Python