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基础教程之udp端口扫描
Feb 10 Python
详解Python程序与服务器连接的WSGI接口
Apr 29 Python
Eclipse中Python开发环境搭建简单教程
Mar 23 Python
CentOS 7下Python 2.7升级至Python3.6.1的实战教程
Jul 06 Python
python中format()函数的简单使用教程
Mar 14 Python
django传值给模板, 再用JS接收并进行操作的实例
May 28 Python
Python 实现异步调用函数的示例讲解
Oct 14 Python
pandas删除指定行详解
Apr 04 Python
python如何将多个PDF进行合并
Aug 13 Python
Python异步编程之协程任务的调度操作实例分析
Feb 01 Python
pytorch 使用加载训练好的模型做inference
Feb 20 Python
Python 的 sum() Pythonic 的求和方法详细
Oct 16 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
阿拉伯的咖啡与水烟
2021/03/03 咖啡文化
PHP4中session登录页面的应用
2008/07/25 PHP
PHP XML备份Mysql数据库
2009/05/27 PHP
PHP中全面阻止SQL注入式攻击分析小结
2012/01/30 PHP
PHP命名空间(Namespace)简明教程
2014/06/11 PHP
php编写批量生成不重复的卡号密码代码
2015/05/14 PHP
thinkPHP连接sqlite3数据库的实现方法(附Thinkphp代码生成器下载)
2016/05/27 PHP
apache集成php7.3.5的详细步骤
2019/06/20 PHP
jQuery 获取、设置HTML或TEXT内容的两种方法
2014/05/23 Javascript
给angular加上动画效遇到的问题总结
2016/02/17 Javascript
JavaScript使用Range调色及透明度实例
2016/09/25 Javascript
使用BootStrapValidator完成前端输入验证
2016/09/28 Javascript
Angular2学习笔记——详解NgModule模块
2016/12/02 Javascript
jQuery中get方法用法分析
2016/12/07 Javascript
JavaScript自动点击链接 防止绕过浏览器访问的方法
2017/01/19 Javascript
JS实现批量上传文件并显示进度功能
2017/06/27 Javascript
vue 项目如何引入微信sdk接口的方法
2017/12/18 Javascript
vue translate peoject实现在线翻译功能【新手必看】
2018/06/07 Javascript
JavaScript创建对象的常用方式总结
2018/08/10 Javascript
vue-cli 默认路由再子路由选中下的选中状态问题及解决代码
2018/09/06 Javascript
微信小程序顶部导航栏滑动tab效果
2019/01/28 Javascript
详解javascript 变量提升(Hoisting)
2019/03/12 Javascript
[01:08:10]2014 DOTA2国际邀请赛中国区预选赛 SPD-GAMING VS LGD-CDEC
2014/05/22 DOTA
[02:41]DOTA2亚洲邀请赛小组赛第三日 赛事回顾
2015/02/01 DOTA
[39:07]LGD vs VP 2018国际邀请赛淘汰赛BO3 第二场 8.21
2018/08/22 DOTA
python实现通过代理服务器访问远程url的方法
2015/04/29 Python
Python中用字符串调用函数或方法示例代码
2017/08/04 Python
Python 实现微信防撤回功能
2019/04/29 Python
Python 20行简单实现有道在线翻译的详解
2019/05/15 Python
python 安装教程之Pycharm安装及配置字体主题,换行,自动更新
2020/03/13 Python
python实现时间序列自相关图(acf)、偏自相关图(pacf)教程
2020/06/03 Python
flask开启多线程的具体方法
2020/08/02 Python
阿提哈德航空官方网站:Etihad Airways
2017/01/06 全球购物
美国手工艺品市场的领导者:Annie’s
2019/04/04 全球购物
同事打架检讨书
2015/05/06 职场文书
2020年元旦晚会策划书模板
2019/12/30 职场文书