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 django集成cas验证系统
Jul 14 Python
Python魔术方法详解
Feb 14 Python
Python 基于Twisted框架的文件夹网络传输源码
Aug 28 Python
简单了解Django模板的使用
Dec 20 Python
python编写分类决策树的代码
Dec 21 Python
Python元组及文件核心对象类型详解
Feb 11 Python
tensorflow saver 保存和恢复指定 tensor的实例讲解
Jul 26 Python
Python面向对象之静态属性、类方法与静态方法分析
Aug 24 Python
python绘制散点图并标记序号的方法
Dec 11 Python
python tkinter基本属性详解
Sep 16 Python
Python使用shutil模块实现文件拷贝
Jul 31 Python
浅析Python 字符编码与文件处理
Sep 24 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
Linux下将excel数据导入到mssql数据库中的方法
2010/02/08 PHP
linux下php上传文件注意事项
2016/06/11 PHP
centos 7.2下搭建LNMP环境教程
2016/11/20 PHP
splice slice区别
2006/10/09 Javascript
location.search在客户端获取Url参数的方法
2010/06/08 Javascript
jquery的$getjson调用并获取远程的JSON字符串问题
2012/12/10 Javascript
extjs 3.31 TreeGrid实现静态页面加载json到TreeGrid里面
2013/04/02 Javascript
cookie中的path与domain属性详解
2013/12/18 Javascript
深入分析Cookie的安全性问题
2015/03/01 Javascript
jQuery网页版打砖块小游戏源码分享
2015/08/20 Javascript
很不错的两款Bootstrap Icon图标选择组件
2016/01/28 Javascript
利用js编写响应式侧边栏
2016/09/17 Javascript
Bootstrap 3 进度条的实现
2017/02/22 Javascript
详解如何用webpack打包一个网站应用项目
2017/07/12 Javascript
vue 1.x 交互实现仿百度下拉列表示例
2017/10/21 Javascript
jQuery实现百度图片移入移出内容提示框上下左右移动的效果
2018/06/05 jQuery
详解react内联样式使用webpack将px转rem
2018/09/13 Javascript
函数式编程入门实践(一)
2019/04/20 Javascript
深入了解query和params的使用区别
2019/06/24 Javascript
Python Web框架Flask信号机制(signals)介绍
2015/01/01 Python
Python基于回溯法子集树模板解决旅行商问题(TSP)实例
2017/09/05 Python
利用numpy实现一、二维数组的拼接简单代码示例
2017/12/15 Python
纯python实现机器学习之kNN算法示例
2018/03/01 Python
python实现按长宽比缩放图片
2018/06/07 Python
python监测当前联网状态并连接的实例
2018/12/18 Python
django解决跨域请求的问题详解
2019/01/20 Python
Python3 ID3决策树判断申请贷款是否成功的实现代码
2020/05/21 Python
美国最好的葡萄酒网上商店:Wine Library
2019/11/02 全球购物
求两个数的乘积和商数,该作用由宏定义来实现
2013/03/13 面试题
2014县政府领导班子三严三实对照检查材料思想汇报
2014/09/26 职场文书
承租经营合作者协议书
2014/10/01 职场文书
四川省传达学习贯彻党的群众路线教育实践活动总结大会精神新闻稿
2014/10/26 职场文书
财务人员个人工作总结
2015/02/27 职场文书
2015年“七七卢沟桥事变”纪念活动总结
2015/03/24 职场文书
如何让vue长列表快速加载
2021/03/29 Vue.js
Python pyecharts绘制条形图详解
2022/04/02 Python