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代码做configure文件
Jul 20 Python
python连接远程ftp服务器并列出目录下文件的方法
Apr 01 Python
TensorFlow实现创建分类器
Feb 06 Python
python中使用iterrows()对dataframe进行遍历的实例
Jun 09 Python
Python数据抓取爬虫代理防封IP方法
Dec 23 Python
简单了解python反射机制的一些知识
Jul 13 Python
python各类经纬度转换的实例代码
Aug 08 Python
如何关掉pycharm中的python console(图解)
Oct 31 Python
浅谈python中频繁的print到底能浪费多长时间
Feb 21 Python
python实现爱奇艺登陆密码RSA加密的方法示例详解
May 27 Python
keras 回调函数Callbacks 断点ModelCheckpoint教程
Jun 18 Python
python用opencv 图像傅里叶变换
Jan 04 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 归并排序 数组交集
2011/05/10 PHP
PHP获取浏览器信息类和客户端地理位置的2个方法
2014/04/24 PHP
PHP7 echo和print语句实例用法
2019/02/15 PHP
php进行md5加密简单实例方法
2019/09/19 PHP
NiftyCube——轻松实现圆角边框
2007/02/20 Javascript
jquery 面包屑导航 具体实现
2013/06/05 Javascript
ExtJS实现文件下载的方法实例
2013/11/09 Javascript
javascript控制Div层透明属性由浅变深由深变浅逐渐显示
2013/11/12 Javascript
JS控制静态页面之间传递参数获取参数并应用的简单实例
2016/08/10 Javascript
总结Javascript中的隐式类型转换
2016/08/24 Javascript
完美解决IE不支持Data.parse()的问题
2016/11/24 Javascript
谈谈JavaScript中浏览器兼容问题的写法小议
2016/12/17 Javascript
bootstrap daterangepicker汉化以及扩展功能
2017/06/15 Javascript
Javascript格式化并高亮xml字符串的方法及注意事项
2018/08/13 Javascript
Vue2.0 v-for filter列表过滤功能的实现
2018/09/07 Javascript
微信小程序云开发 搭建一个管理小程序
2019/05/17 Javascript
一步一步实现Vue的响应式(对象观测)
2019/09/02 Javascript
python用reduce和map把字符串转为数字的方法
2016/12/19 Python
Python随机读取文件实现实例
2017/05/25 Python
python绘制简单折线图代码示例
2017/12/19 Python
django admin添加数据自动记录user到表中的实现方法
2018/01/05 Python
详解Python图像处理库Pillow常用使用方法
2019/09/02 Python
Python通过字典映射函数实现switch
2020/11/06 Python
解决使用Pandas 读取超过65536行的Excel文件问题
2020/11/10 Python
Python3 用什么IDE开发工具比较好
2020/11/28 Python
HTML5的新特性(1)
2016/03/03 HTML / CSS
俄罗斯小米家用电器、电子产品和智能家居商店:Poood.ru
2020/04/03 全球购物
秘书岗位职责
2013/11/18 职场文书
个人借款担保书
2014/04/02 职场文书
大专毕业生求职信
2014/07/05 职场文书
小学生我的梦想演讲稿
2014/08/21 职场文书
2014年幼儿园后勤工作总结
2014/11/10 职场文书
应届毕业生求职信范文
2015/03/19 职场文书
小学英语新课改心得体会
2016/01/22 职场文书
nginx 添加http_stub_status_module模块
2022/05/25 Servers
Java实现添加条码或二维码到Word文档
2022/06/01 Java/Android