在Python中调用Ping命令,批量IP的方法


Posted in Python onJanuary 26, 2019

如下所示:

#!/usr/bin/env python
#coding:UTF-8
'''''''
 Author: jefferchen@163.com
 可在命令行直接带目的IP,也可将IP列表在文本文件中。
 pingip.py -d DestIP 
 DestIP示例: a)单个: 192.168.11.1
        b)多个: 192.168.11.1;172.16.8.1;176.13.18.2
        c)网段: 192.168.11.1-127
  文本文件:ip.txt
      目的IP多行存储
'''''''
import argparse
import os
import platform
import time,datetime

def PingCmd():
  cmdStr = ''
  if platform.system()=='Linux':
    cmdStr = 'ping -c 1 %s > /dev/null'
  else:
    cmdStr = 'ping -n 1 %s > nul'
  return cmdStr

def IPV4SegList(aList):
  IPSeg = aList[0].split('.')
  IP4Begin = int(IPSeg[3])
  IP4End  = int(aList[1])
  segList = []
  if IP4End<=IP4Begin:
    IP4End += IP4Begin
  else:
    IP4End +=1
  for ip in range(IP4Begin,IP4End):
    aIP = IPSeg[0]+'.'+IPSeg[1]+'.'+IPSeg[2]+'.'+str(ip)
    segList += [aIP]
  return segList

def ParseSeg(aSeg):
  segList = []
  aList = aSeg.split('-')
  if len(aList)==2:
    segList = IPV4SegList(aList)
  else:
    segList = aList
  return segList

def AddLineIP(IPList,aLine):
  LineList = aLine.split(';')
  for aSeg in LineList:
    segList = ParseSeg(aSeg)
    IPList += segList
  return IPList

def GetIPListFromFile(filename):
  IPList = []
  f = open(filename)
  lines = f.readlines()
  for line in lines:
    line = line.strip()
    line = line.replace('\n','')
    IPList = AddLineIP(IPList,line)
  return IPList

def NotifyAdmin(failureIP):
  print('Network error at ',failureIP)

def ReportSummary(success,failure):
  print('----DONE! Total: %s nodes. %s ---'%(success+failure,timeFmt()))

def PingList(aList):
  sucess,failure = 0,0
  failureIP = []
  print('Trying...')
  for ip in aList:
    cmdStr = PingCmd()%ip.replace('\n','')
    res = os.system(cmdStr)
    if res < 1 :
      sucess += 1
    else:
      failure += 1
      failureIP += [ip]
    time.sleep(1)
  if failure :
     NotifyAdmin(failureIP)
  else:
    ReportSummary(sucess,failure);


def timeFmt():
  return time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))

def writeLog(content):
  print('[%s] %s' % (timeFmt(), content))
  file_object = open('ping.' + time.strftime('%Y-%m-%d', time.localtime(time.time())) + '.log', 'a')
  file_object.write('[%s] %s\n' % (timeFmt(), content));
  file_object.close()

if __name__ == '__main__':
  parse = argparse.ArgumentParser(description='Batch ping utility.')
  parse.add_argument('-f','--filename',default='ip.txt',help='IP file name(Default IP.txt)')
  parse.add_argument('-d','--destip',type=str,default='',help='destination IPs ');
  args = parse.parse_args()
  if args.destip!='':
    IPList = AddLineIP([],args.destip)
  else:
    if args.filename!='':
      IPFile = args.filename
    else:
      IPFile = 'ip.txt'
    IPList = GetIPListFromFile(IPFile)
  PingList(IPList)

以上这篇在Python中调用Ping命令,批量IP的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python实现端口复用实例代码
Jul 03 Python
Python列表append和+的区别浅析
Feb 02 Python
Python闭包的两个注意事项(推荐)
Mar 20 Python
Python生成随机数组的方法小结
Apr 15 Python
Python基于matplotlib实现绘制三维图形功能示例
Jan 18 Python
用python实现百度翻译的示例代码
Mar 09 Python
python实现批量按比例缩放图片效果
Mar 30 Python
对pandas进行数据预处理的实例讲解
Apr 20 Python
Python模块汇总(常用第三方库)
Oct 07 Python
如何将 awk 脚本移植到 Python
Dec 09 Python
pycharm 关掉syntax检查操作
Jun 09 Python
详解python 条件语句和while循环的实例代码
Dec 28 Python
python 定时任务去检测服务器端口是否通的实例
Jan 26 #Python
对python使用telnet实现弱密码登录的方法详解
Jan 26 #Python
Python检查ping终端的方法
Jan 26 #Python
使用python Telnet远程登录执行程序的方法
Jan 26 #Python
Python判断telnet通不通的实例
Jan 26 #Python
解决python测试opencv时imread导致的错误问题
Jan 26 #Python
在Python 中实现图片加框和加字的方法
Jan 26 #Python
You might like
漫威DC即将合作联动,而双方早已经秘密开始
2020/04/09 欧美动漫
PHP入门经历和学习过程分享
2014/04/11 PHP
PHP获取数组中重复最多的元素的实现方法
2014/11/11 PHP
[原创]PHP正则匹配中英文、数字及下划线的方法【用户名验证】
2017/08/01 PHP
js 加载时自动调整图片大小
2008/05/28 Javascript
javascript 进阶篇1 正则表达式,cookie管理,userData
2012/03/14 Javascript
js模仿jquery的写法示例代码
2013/06/16 Javascript
Jquery 的outerHeight方法使用介绍
2013/09/11 Javascript
基于javascript实现判断移动终端浏览器版本信息
2014/12/09 Javascript
JavaScript实现的多种鼠标拖放效果
2015/11/03 Javascript
在Node.js中使用Javascript Generators详解
2016/05/05 Javascript
原生js编写焦点图效果
2016/12/08 Javascript
Highcharts+NodeJS搭建数据可视化平台示例
2017/01/01 NodeJs
ReactNative列表ListView的用法
2017/08/02 Javascript
Vue中的异步组件函数实现代码
2018/07/20 Javascript
解决layui使用layui-icon出现默认图标的问题
2019/09/11 Javascript
vue使用一些外部插件及样式的配置代码
2019/11/18 Javascript
JS实现图片切换特效
2019/12/23 Javascript
js布局实现单选按钮控件
2020/01/17 Javascript
[51:50]完美世界DOTA2联赛 Magma vs GXR 第一场 11.07
2020/11/10 DOTA
python实现哈希表
2014/02/07 Python
Python中subprocess的简单使用示例
2015/07/28 Python
浅谈Python中重载isinstance继承关系的问题
2018/05/04 Python
Python 编码规范(Google Python Style Guide)
2018/05/05 Python
python按键按住不放持续响应的实例代码
2019/07/17 Python
python的re模块使用方法详解
2019/07/26 Python
Django import export实现数据库导入导出方式
2020/04/03 Python
浅谈Python中os模块及shutil模块的常规操作
2020/04/03 Python
YSL圣罗兰美妆美国官网:Yves Saint Lauret US
2016/11/21 全球购物
Stella McCartney官网:成衣、包袋、香水、内衣、童装及Adidas系列
2018/12/20 全球购物
给实习单位的感谢信
2014/02/01 职场文书
土地转让协议书范本
2014/04/15 职场文书
初中教师业务学习材料
2014/05/12 职场文书
JavaScript如何优化逻辑判断代码详解
2021/06/08 Javascript
vue3使用vuedraggable实现拖拽功能
2022/04/06 Vue.js
oracle delete误删除表数据后如何恢复
2022/06/28 Oracle