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批量处理dat文件及科学计算方法详解
May 08 Python
Python 16进制与中文相互转换的实现方法
Jul 09 Python
python实现一组典型数据格式转换
Dec 15 Python
python随机在一张图像上截取任意大小图片的方法
Jan 24 Python
深入了解和应用Python 装饰器 @decorator
Apr 02 Python
在django模板中实现超链接配置
Aug 21 Python
python 实现多线程下载m3u8格式视频并使用fmmpeg合并
Nov 15 Python
彻底搞懂 python 中文乱码问题(深入分析)
Feb 28 Python
在Python IDLE 下调用anaconda中的库教程
Mar 09 Python
Python多线程threading创建及使用方法解析
Jun 17 Python
Django model class Meta原理解析
Nov 14 Python
python空元组在all中返回结果详解
Dec 15 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环境――Appserv
2006/12/13 PHP
php和jquery实现地图区域数据统计展示数据示例
2014/02/12 PHP
PHP匿名函数和use子句用法实例
2016/03/16 PHP
Apache无法自动跳转却显示目录的解决方法
2020/11/30 PHP
php 开发中加密的几种方法总结
2017/03/22 PHP
PHP魔术方法之__call与__callStatic使用方法
2017/07/23 PHP
PHP实现超简单的SSL加密解密、验证及签名的方法示例
2017/08/28 PHP
Laravel 解决composer相关操作提示php相关异常的问题
2019/10/23 PHP
php使用goto实现自动重启swoole、reactphp、workerman服务的代码
2020/04/13 PHP
javscript对象原型的一些看法
2010/09/19 Javascript
jQuery $.get 的妙用 访问本地文本文件
2012/07/12 Javascript
JQuery下拉框应用示例介绍
2014/04/23 Javascript
node.js中的events.emitter.removeAllListeners方法使用说明
2014/12/10 Javascript
JavaScript中switch语句的用法详解
2015/06/03 Javascript
AngularJS在IE8的不支持的解决方法
2016/05/13 Javascript
javascript遍历json对象的key和任意js对象属性实例
2017/03/09 Javascript
vue bootstrap小例子一枚
2017/06/09 Javascript
使用Vue构建可重用的分页组件
2018/03/26 Javascript
浅谈Node.js 沙箱环境
2018/05/15 Javascript
详解解决使用axios发送json后台接收不到的问题
2018/06/27 Javascript
Vue 项目分环境打包的方法示例
2018/08/03 Javascript
一个因@click.stop引发的bug的解决
2019/01/08 Javascript
对layui中的onevent 和event的使用详解
2019/09/06 Javascript
JavaScript中使用Spread运算符的八种方法总结
2020/06/18 Javascript
vue 使用原生组件上传图片的实例
2020/09/08 Javascript
微信小程序入门之绘制时钟
2020/10/22 Javascript
用javascript实现倒计时效果
2021/02/09 Javascript
[01:05]主宰至宝剑心之遗
2017/03/16 DOTA
python通过urllib2爬网页上种子下载示例
2014/02/24 Python
设计模式中的原型模式在Python程序中的应用示例
2016/03/02 Python
python ftp 按目录结构上传下载的实现代码
2018/09/12 Python
基于Python数据分析之pandas统计分析
2020/03/03 Python
企业管理毕业生求职信
2014/03/11 职场文书
培训科主任岗位职责
2014/08/08 职场文书
授权委托书
2014/09/17 职场文书
解除劳动关系协议书2篇
2014/11/28 职场文书