在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 字典与字符串的互转实例
Jan 13 Python
Django实现的自定义访问日志模块示例
Jun 23 Python
浅谈Python用QQ邮箱发送邮件时授权码的问题
Jan 29 Python
python DataFrame获取行数、列数、索引及第几行第几列的值方法
Apr 08 Python
Python基础教程之if判断,while循环,循环嵌套
Apr 25 Python
python 获取等间隔的数组实例
Jul 04 Python
深入了解Django中间件及其方法
Jul 26 Python
Python with语句和过程抽取思想
Dec 23 Python
python Tensor和Array对比分析
Jan 08 Python
python实现五子棋游戏(pygame版)
Jan 19 Python
python绘制动态曲线教程
Feb 24 Python
详解python metaclass(元类)
Aug 13 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
深入理解:XML与对象的序列化与反序列化
2013/06/08 PHP
利用PHP实现短域名互转
2013/07/05 PHP
phpmailer发送邮件之后,返回收件人是否阅读了邮件的方法
2014/07/19 PHP
PHP实现简单爬虫的方法
2015/07/29 PHP
PHP中抽象类和抽象方法概念与用法分析
2016/05/24 PHP
PHP中Static(静态)关键字功能与用法实例分析
2019/04/05 PHP
document.designMode的功能与使用方法介绍
2007/11/22 Javascript
日期 时间js控件
2009/05/07 Javascript
JQuery模板插件 jquery.tmpl 动态ajax扩展
2011/11/10 Javascript
IE6下opacity与JQuery的奇妙结合
2013/03/01 Javascript
在图片上显示左右箭头类似翻页的代码
2013/03/04 Javascript
JS中Iframe之间传值及子页面与父页面应用
2013/03/11 Javascript
变量声明时命名与变量作为对象属性时命名的区别解析
2013/12/06 Javascript
Javascript图片上传前的本地预览实例
2014/06/16 Javascript
推荐6款基于jQuery实现图片效果插件
2014/12/07 Javascript
教你JS中的运算符乘方、开方及变量格式转换
2016/08/09 Javascript
BootStrapTable服务器分页实例解析
2016/12/20 Javascript
Web技术实现移动监测的介绍
2017/09/18 Javascript
vuejs 切换导航条高亮(路由菜单高亮)的方法示例
2018/05/29 Javascript
微信小程序实现元素渐入渐出动画效果封装方法
2019/05/18 Javascript
微信小程序实现左滑删除效果
2020/11/18 Javascript
50行代码实现贪吃蛇(具体思路及代码)
2013/04/27 Python
Python多线程编程简单介绍
2015/04/13 Python
简单掌握Python中glob模块查找文件路径的用法
2016/07/05 Python
Django之模型层多表操作的实现
2019/01/08 Python
python mysql 字段与关键字冲突的解决方式
2020/03/02 Python
Pop In A Box英国:Funko POP搪胶公仔
2019/05/27 全球购物
用Python匹配HTML tag的时候,<.*>和<.*?>有什么区别
2012/11/04 面试题
两只小狮子教学反思
2014/02/05 职场文书
高三高考决心书
2014/03/11 职场文书
蟋蟀的住宅教学反思
2014/04/26 职场文书
关爱老人标语
2014/06/21 职场文书
祝福语集锦:给百岁老人祝寿贺词
2019/11/19 职场文书
matplotlib如何设置坐标轴刻度的个数及标签的方法总结
2021/06/11 Python
Python List remove()实例用法详解
2021/08/02 Python
Java实现带图形界面的聊天程序
2022/06/10 Java/Android