在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中定义结构体的方法
Mar 04 Python
python使用opencv进行人脸识别
Apr 07 Python
Python使用plotly绘制数据图表的方法
Jul 18 Python
Python定时器实例代码
Nov 01 Python
浅谈python 线程池threadpool之实现
Nov 17 Python
对python使用http、https代理的实例讲解
May 07 Python
Python实现分段线性插值
Dec 17 Python
python自定义函数实现最大值的输出方法
Jul 09 Python
python读取大文件越来越慢的原因与解决
Aug 08 Python
python如何查看安装了的模块
Jun 23 Python
Python办公自动化之Excel(中)
May 24 Python
浅析Python中的随机采样和概率分布
Dec 06 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上传文件问题汇总
2015/01/30 PHP
php文件上传后端处理小技巧
2016/05/22 PHP
Laravel模型事件的实现原理详解
2018/03/14 PHP
php实现在线考试系统【附源码】
2018/09/18 PHP
PHP实现的微信APP支付功能示例【基于TP5框架】
2019/09/16 PHP
如何解决PHP获取不到SESSION信息之一般情况
2019/10/10 PHP
php高性能日志系统 seaslog 的安装与使用方法分析
2020/02/29 PHP
javascript获取web应用根目录的方法
2014/02/12 Javascript
js onmousewheel事件多次触发问题解决方法
2014/10/17 Javascript
jQuery匹配文档链接并添加class的方法
2015/06/26 Javascript
Bootstrap每天必学之按钮(一)
2015/11/24 Javascript
在AngularJS框架中处理数据建模的方式解析
2016/03/05 Javascript
有关JavaScript中call()和apply() 的一些理解
2016/05/20 Javascript
Javascript中return的使用与闭包详解
2017/01/11 Javascript
JavaScript中无法通过div.style.left获取值的解决方法
2017/02/19 Javascript
jQuery操作之效果详解
2017/05/19 jQuery
强大的JavaScript响应式图表Chartist.js的使用
2017/09/13 Javascript
vue如何引入sass全局变量
2018/06/28 Javascript
element-ui表格数据转换的示例代码
2018/08/24 Javascript
vue多级复杂列表展开/折叠及全选/分组全选实现
2018/11/05 Javascript
详解写好JS条件语句的5条守则
2019/02/28 Javascript
基于react项目打包css引用路径错误解决方案
2020/10/28 Javascript
[03:59]第二届DOTA2亚洲邀请赛选手传记-VGJ.rOtk
2017/04/03 DOTA
在Python 3中实现类型检查器的简单方法
2015/07/03 Python
python数字图像处理之骨架提取与分水岭算法
2018/04/27 Python
django 邮件发送模块smtp使用详解
2019/07/22 Python
Python通过yagmail实现发送邮件代码解析
2020/10/27 Python
python实现简单猜单词游戏
2020/12/24 Python
简述Html5 IphoneX 适配方法
2018/02/08 HTML / CSS
英国领先的珍珠首饰品牌:Orchira
2016/09/11 全球购物
文秘大学生求职信
2014/02/25 职场文书
应聘英语教师求职信
2014/04/24 职场文书
2014最新房贷收入证明范本
2014/09/12 职场文书
公司委托书格式范文
2014/10/09 职场文书
工作失职检讨书500字
2014/10/17 职场文书
创业方案:赚钱的烧烤店该怎样做?
2019/07/05 职场文书