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中的__init__ 、__new__、__call__小结
Apr 25 Python
Python正则表达式教程之二:捕获篇
Mar 02 Python
Python算法之求n个节点不同二叉树个数
Oct 27 Python
在Python中字典根据多项规则排序的方法
Jan 21 Python
Django 在iframe里跳转顶层url的例子
Aug 21 Python
Python threading的使用方法解析
Aug 28 Python
python3.7实现云之讯、聚合短信平台的短信发送功能
Sep 26 Python
Python小程序 控制鼠标循环点击代码实例
Oct 08 Python
python range实例用法分享
Feb 06 Python
Python WebSocket长连接心跳与短连接的示例
Nov 24 Python
Pytorch实现图像识别之数字识别(附详细注释)
May 11 Python
图神经网络GNN算法
May 11 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高级对象构建 多个构造函数的使用
2012/02/05 PHP
php插入mysql数据返回id的方法
2018/05/31 PHP
基于ThinkPHP5框架使用QueryList爬取并存入mysql数据库操作示例
2019/05/25 PHP
php获取是星期几的的一些常用姿势
2019/12/15 PHP
php redis setnx分布式锁简单原理解析
2020/10/23 PHP
菜鸟javascript基础资料整理3 正则
2010/12/06 Javascript
jQuery操作select的实例代码
2012/06/14 Javascript
JavaScript程序员应该知道的45个实用技巧
2014/03/04 Javascript
jQuery中before()方法用法实例
2014/12/25 Javascript
JavaScript实现SHA-1加密算法的方法
2015/03/11 Javascript
JS中call/apply、arguments、undefined/null方法详解
2016/02/15 Javascript
浅谈mint-ui loadmore组件注意的问题
2017/11/08 Javascript
基于jquery实现左右上下移动效果
2018/05/02 jQuery
微信小程序显示倒计时功能示例【测试可用】
2018/12/03 Javascript
一次让你了解全部JavaScript的作用域
2019/06/24 Javascript
小程序中英文混合排序问题解决
2019/08/02 Javascript
uni-app自定义导航栏按钮|uniapp仿微信顶部导航条功能
2019/11/12 Javascript
[00:55]2015国际邀请赛中国区预选赛5月23日——28日约战上海
2015/05/25 DOTA
python将文本转换成图片输出的方法
2015/04/28 Python
Python字符串替换实例分析
2015/05/11 Python
浅谈Python Opencv中gamma变换的使用详解
2018/04/02 Python
Flask框架Jinjia模板常用语法总结
2018/07/19 Python
Python 限制线程的最大数量的方法(Semaphore)
2019/02/22 Python
PyTorch学习:动态图和静态图的例子
2020/01/06 Python
python pandas利用fillna方法实现部分自动填充功能
2020/03/16 Python
python利用paramiko实现交换机巡检的示例
2020/09/22 Python
HTML5 Video标签的属性、方法和事件汇总介绍
2015/04/24 HTML / CSS
详解html5页面 rem 布局适配方法
2018/01/12 HTML / CSS
英国100%防污和防水的靴子:Muck Boot Company
2020/09/08 全球购物
IMPORT的选项IGNORE有什么作用?缺省是什么设置?
2015/09/17 面试题
大专学生推荐信范文
2013/11/19 职场文书
2014年幼儿园植树节活动方案
2014/03/02 职场文书
美国旅游签证工作证明
2014/10/14 职场文书
2015年企业员工工作总结范文
2015/05/21 职场文书
廉洁自律准则学习心得体会
2016/01/13 职场文书
浅谈:电影《孔子》观后感(范文)
2019/10/14 职场文书