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中转换角度为弧度的radians()方法
May 18 Python
python如何通过protobuf实现rpc
Mar 06 Python
Python 基础之字符串string详解及实例
Apr 01 Python
浅谈python import引入不同路径下的模块
Jul 11 Python
Python中sort和sorted函数代码解析
Jan 25 Python
python中的插值 scipy-interp的实现代码
Jul 23 Python
在unittest中使用 logging 模块记录测试数据的方法
Nov 30 Python
Flask之请求钩子的实现
Dec 23 Python
Flask框架踩坑之ajax跨域请求实现
Feb 22 Python
python3中property使用方法详解
Apr 23 Python
浅谈Django中view对数据库的调用方法
Jul 18 Python
解决Jupyter notebook更换主题工具栏被隐藏及添加目录生成插件问题
Apr 20 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
人大复印资料处理程序_补充篇
2006/10/09 PHP
IIS+PHP+MySQL+Zend配置 (视频教程)
2006/12/13 PHP
php用ini_get获取php.ini里变量值的方法
2015/03/04 PHP
PHP基于单例模式编写PDO类的方法
2016/09/13 PHP
PHP封装curl的调用接口及常用函数详解
2018/05/31 PHP
PHP观察者模式示例【Laravel框架中有用到】
2018/06/15 PHP
JavaScript 组件之旅(三):用 Ant 构建组件
2009/10/28 Javascript
JS实现self的resend
2010/07/22 Javascript
理解Javascript_12_执行模型浅析
2010/10/18 Javascript
javascript完美拖拽的实现方法
2013/09/29 Javascript
Flex通过JS获取客户端IP和计算机名的实例代码
2013/11/21 Javascript
JavaScript判断浏览器和hack滚动条的写法
2017/07/23 Javascript
微信小程序模板和模块化用法实例分析
2017/11/28 Javascript
React 路由懒加载的几种实现方案
2018/10/23 Javascript
基于Vue2实现简易的省市区县三级联动组件效果
2018/11/05 Javascript
微信小程序map组件结合高德地图API实现wx.chooseLocation功能示例
2019/01/23 Javascript
JavaScript从原型到原型链深入理解
2019/06/03 Javascript
javascript数组的定义及操作实例
2019/11/10 Javascript
JS Array.from()将伪数组转换成数组的方法示例
2020/03/23 Javascript
学前端,css与javascript重难点浅析
2020/06/11 Javascript
[01:24]DOTA2上海特锦赛OG战队抵达 专车接机入驻总统套房
2016/02/23 DOTA
Eclipse + Python 的安装与配置流程
2013/03/05 Python
python结合selenium获取XX省交通违章数据的实现思路及代码
2016/06/26 Python
Python制作词云的方法
2018/01/03 Python
Python 获取div标签中的文字实例
2018/12/20 Python
Python3.9新特性详解
2020/10/10 Python
scrapy头部修改的方法详解
2020/12/06 Python
CSS3 实现穿梭星空动画
2020/11/13 HTML / CSS
怀俄明州飞钓:Platte River Fly Shop
2017/12/28 全球购物
计算机专业职业生涯规划范文
2014/01/19 职场文书
书法比赛获奖感言
2014/02/10 职场文书
产品质量承诺范本
2014/03/31 职场文书
教师节领导致辞
2015/07/29 职场文书
java设计模式--三种工厂模式详解
2021/07/21 Java/Android
前端监听websocket消息并实时弹出(实例代码)
2021/11/27 Javascript
MySQL索引 高效获取数据的数据结构
2022/05/02 MySQL