在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操作xml文件示例
Apr 07 Python
python使用PyGame绘制图像并保存为图片文件的方法
Apr 24 Python
在Python中使用成员运算符的示例
May 13 Python
简单介绍Python中的几种数据类型
Jan 02 Python
wxpython中Textctrl回车事件无效的解决方法
Jul 21 Python
详解Python中的静态方法与类成员方法
Feb 28 Python
关于Pycharm无法debug问题的总结
Jan 19 Python
Python爬虫学习之获取指定网页源码
Jul 30 Python
如何爬取通过ajax加载数据的网站
Aug 15 Python
Django框架 信号调度原理解析
Sep 04 Python
python3中sorted函数里cmp参数改变详解
Mar 12 Python
python excel和yaml文件的读取封装
Jan 12 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
php实现xml与json之间的相互转换功能实例
2016/07/07 PHP
Laravel使用模型实现like模糊查询的例子
2019/10/24 PHP
javascript 表单的友好用户体现
2009/01/07 Javascript
javascript Base类 包含基本的方法
2009/07/22 Javascript
JQuery从头学起第三讲
2010/07/06 Javascript
在服务端(Page.Write)调用自定义的JS方法详解
2013/08/09 Javascript
Extjs4中tree的拖拽功能(可以两棵树之间拖拽) 简单实例
2013/12/08 Javascript
JavaScript简介
2015/02/15 Javascript
批量下载对路网图片并生成html的实现方法
2016/06/07 Javascript
js对象浅拷贝和深拷贝详解
2016/09/05 Javascript
最常见的左侧分类菜单栏jQuery实现代码
2016/11/28 Javascript
日期时间范围选择插件:daterangepicker使用总结(必看篇)
2017/09/14 Javascript
JS实现简易换图时钟功能分析
2018/01/04 Javascript
js+canvas实现滑动拼图验证码功能
2018/03/26 Javascript
JS中的算法与数据结构之栈(Stack)实例详解
2019/08/20 Javascript
详解vue-router的Import异步加载模块问题的解决方案
2020/05/13 Javascript
js实现双人五子棋小游戏
2020/05/28 Javascript
python使用cStringIO实现临时内存文件访问的方法
2015/03/26 Python
Python3利用SMTP协议发送E-mail电子邮件的方法
2017/09/30 Python
Python重新加载模块的实现方法
2018/10/16 Python
使用Python 统计高频字数的方法
2019/01/31 Python
Python读写文件模式和文件对象方法实例详解
2019/09/17 Python
python实现猜数游戏(保存游戏记录)
2020/06/22 Python
Python DES加密实现原理及实例解析
2020/07/17 Python
Python使用eval函数执行动态标表达式过程详解
2020/10/17 Python
阿迪达斯意大利在线商店:adidas意大利
2016/09/19 全球购物
体验完美剃须:The Art of Shaving
2018/08/06 全球购物
The North Face北面荷兰官网:美国著名户外品牌
2019/10/16 全球购物
当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
2014/09/09 面试题
大学生求职中的自我评价
2013/10/01 职场文书
关于幼儿的自我评价
2013/12/18 职场文书
乡镇干部个人整改措施思想汇报
2014/10/10 职场文书
荆州古城导游词
2015/02/06 职场文书
人民的好儿女观后感
2015/06/18 职场文书
快消品行业营销模式与盈利模式分享
2019/09/27 职场文书
Python机器学习之PCA降维算法详解
2021/05/19 Python