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 25 Python
Python2.x版本中maketrans()方法的使用介绍
May 19 Python
python统计cpu利用率的方法
Jun 02 Python
[原创]教女朋友学Python3(二)简单的输入输出及内置函数查看
Nov 30 Python
Python计算一个给定时间点前一个月和后一个月第一天的方法
May 29 Python
Python实现的读取电脑硬件信息功能示例
May 30 Python
python读取csv和txt数据转换成向量的实例
Feb 12 Python
python调用虹软2.0第三版的具体使用
Feb 22 Python
如何修复使用 Python ORM 工具 SQLAlchemy 时的常见陷阱
Nov 19 Python
python3实现从kafka获取数据,并解析为json格式,写入到mysql中
Dec 23 Python
Tensorflow之MNIST CNN实现并保存、加载模型
Jun 17 Python
python Django框架快速入门教程(后台管理)
Jul 21 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 array_flip() 删除重复数组元素专用函数
2010/05/16 PHP
php实现发送微信模板消息的方法
2015/03/07 PHP
JS getStyle获取最终样式函数代码
2010/04/01 Javascript
select标记美化--JS式插件、后期加载
2013/04/01 Javascript
快速查找数组中的某个元素并返回下标示例
2013/09/03 Javascript
通过正则表达式实现表单验证是否为中文
2014/02/18 Javascript
json的定义、标准格式及json字符串检验
2014/05/11 Javascript
NodeJS学习笔记之网络编程
2014/08/03 NodeJs
Javascript基础知识(二)事件
2014/09/29 Javascript
jQuery实现切换字体大小的方法
2015/03/10 Javascript
jQuery焦点图左右转换效果
2016/12/12 Javascript
BootStrap fileinput.js文件上传组件实例代码
2017/02/20 Javascript
JS设置手机验证码60s等待实现代码
2017/06/14 Javascript
使用express搭建一个简单的查询服务器的方法
2018/02/09 Javascript
vue axios请求超时的正确处理方法
2018/04/02 Javascript
js微信分享接口调用详解
2019/07/23 Javascript
Typescript的三种运行方式(小结)
2019/09/18 Javascript
vue导航栏部分的动态渲染实例
2019/11/01 Javascript
Windows和Linux下Python输出彩色文字的方法教程
2017/05/02 Python
python 读写文件,按行修改文件的方法
2018/07/12 Python
Python Django中间件,中间件函数,全局异常处理操作示例
2019/11/08 Python
python读取图片的几种方式及图像宽和高的存储顺序
2020/02/11 Python
css3 按钮 利用css3实现超酷下载按钮
2013/03/18 HTML / CSS
HTML5 File API改善网页上传功能
2009/08/19 HTML / CSS
中国高端鲜花第一品牌:roseonly(一生只送一人)
2017/02/12 全球购物
精油和天然健康美容产品:Art Naturals
2018/01/27 全球购物
意大利时尚奢侈品店:D’Aniello Boutique
2021/01/19 全球购物
销售演讲稿范文
2014/01/08 职场文书
超市5.1促销活动
2014/01/15 职场文书
索桥的故事教学反思
2014/02/06 职场文书
库房管理员岗位职责
2014/03/09 职场文书
《忆江南》教学反思
2014/04/07 职场文书
入党现实表现材料
2014/12/23 职场文书
校园开放日新闻稿
2015/07/17 职场文书
Python快速优雅的批量修改Word文档样式
2021/05/20 Python
设置IIS Express并发数
2022/07/07 Servers