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中实现结构相似的函数调用方法
Mar 10 Python
使用Python发送邮件附件以定时备份MySQL的教程
Apr 25 Python
python使用fork实现守护进程的方法
Nov 16 Python
Python数据类型中的“冒号“[::]——分片与步长操作示例
Jan 24 Python
关于django 数据库迁移(migrate)应该知道的一些事
May 27 Python
使用Python对微信好友进行数据分析
Jun 27 Python
详解Python字典小结
Oct 20 Python
python查看文件大小和文件夹内容的方法
Jul 08 Python
阿里云ECS服务器部署django的方法
Aug 29 Python
django实现模板中的字符串文字和自动转义
Mar 31 Python
keras 自定义loss model.add_loss的使用详解
Jun 22 Python
Python 中的单分派泛函数你真的了解吗
Jun 22 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
php获取某个目录大小的代码
2008/09/10 PHP
浅谈web上存漏洞及原理分析、防范方法(文件名检测漏洞)
2013/06/29 PHP
浅析PHP中strlen和mb_strlen的区别
2014/08/31 PHP
php在apache环境下实现gzip配置方法
2015/04/02 PHP
php下载文件超时时间的设置方法
2016/10/06 PHP
php断点续传之文件分割合并详解
2016/12/13 PHP
javascript读取RSS数据
2007/01/20 Javascript
JQuery 遮罩层实现(mask)实现代码
2010/01/09 Javascript
JavaScript 面向对象的之私有成员和公开成员
2010/05/04 Javascript
鼠标划过实现延迟加载并隐藏层的js代码
2013/10/11 Javascript
js Date概念详细介绍
2013/11/22 Javascript
JavaScript函数参数使用带参数名的方式赋值传入的方法
2015/03/19 Javascript
JS简单测试循环运行时间的方法
2016/09/04 Javascript
javascript实现获取图片大小及图片等比缩放的方法
2016/11/24 Javascript
微信浏览器禁止页面下拉查看网址实例详解
2017/06/28 Javascript
Bootstrap开发中Tab标签页切换图表显示问题的解决方法
2018/07/13 Javascript
如何从头实现一个node.js的koa框架
2019/06/17 Javascript
jQuery HTML设置内容和属性操作实例分析
2020/05/20 jQuery
javascript全局自定义鼠标右键菜单
2020/12/08 Javascript
[01:43]深扒TI7聊天轮盘语音出处4
2017/05/11 DOTA
Python正确重载运算符的方法示例详解
2017/08/27 Python
Python基于time模块求程序运行时间的方法
2017/09/18 Python
使用python 的matplotlib 画轨道实例
2020/01/19 Python
解决tensorboard多个events文件显示紊乱的问题
2020/02/15 Python
对python中arange()和linspace()的区别说明
2020/05/03 Python
北美主要的汽车零部件零售商:AutoShack.com
2019/02/23 全球购物
国际商务专业职业生涯规划书范文
2014/01/17 职场文书
人事主管岗位职责
2014/01/30 职场文书
县委常委班子专题民主生活会查摆问题及整改措施
2014/09/27 职场文书
2015年出纳年终工作总结
2015/05/14 职场文书
萤火虫之墓观后感
2015/06/05 职场文书
生日寿星公答谢词
2015/09/29 职场文书
2016年感恩教师节校园广播稿
2015/12/18 职场文书
如何在向量化NumPy数组上进行移动窗口
2021/05/18 Python
在pycharm中无法import所安装的库解决方案
2021/05/31 Python
一起来看看Vue的核心原理剖析
2022/03/24 Vue.js