在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时区设置方法与pytz查询时区教程
Nov 27 Python
Python深入学习之特殊方法与多范式
Aug 31 Python
wxPython事件驱动实例详解
Sep 28 Python
python 判断是否为正小数和正整数的实例
Jul 23 Python
利用pandas将numpy数组导出生成excel的实例
Jun 14 Python
Python爬虫包BeautifulSoup异常处理(二)
Jun 17 Python
使用Python实现一个栈判断括号是否平衡
Aug 23 Python
Python多线程threading模块用法实例分析
May 22 Python
face++与python实现人脸识别签到(考勤)功能
Aug 28 Python
Pycharm和Idea支持的vim插件的方法
Feb 21 Python
python 爬虫如何正确的使用cookie
Oct 27 Python
python压包的概念及实例详解
Feb 17 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 date函数参数详解
2006/11/27 PHP
PHP解析目录路径的3个函数总结
2014/11/18 PHP
php session的应用详细介绍
2017/03/22 PHP
JavaScript使用过程中需要注意的地方和一些基本语法
2010/08/26 Javascript
JavaScript.The.Good.Parts阅读笔记(二)作用域&amp;闭包&amp;减缓全局空间污染
2010/11/16 Javascript
jQuery EasyUI API 中文文档 - Form表单
2011/10/06 Javascript
JS实现匀速运动的代码实例
2013/11/29 Javascript
nodejs npm package.json中文文档
2014/09/04 NodeJs
JS实现样式清新的横排下拉菜单效果
2015/10/09 Javascript
JavaScript实现ASC转汉字及汉字转ASC的方法
2016/01/23 Javascript
jQuery控制文本框只能输入数字和字母及使用方法
2016/05/26 Javascript
Google 地图事件实例讲解
2016/08/06 Javascript
bootstrap学习使用(导航条、下拉菜单、轮播、栅格布局等)
2016/12/01 Javascript
Angular 4.x中表单Reactive Forms详解
2017/04/25 Javascript
vue项目上传Github预览的实现示例
2018/11/06 Javascript
vue 父组件给子组件传值子组件给父组件传值的实例代码
2019/04/15 Javascript
JavaScript实现多张图片放大镜效果示例【不限定图片尺寸,rem单位】
2019/05/14 Javascript
Vue-cli项目部署到Nginx服务器的方法
2019/11/01 Javascript
js实现滑动进度条效果
2020/08/21 Javascript
Element-UI 使用el-row 分栏布局的教程
2020/10/26 Javascript
JavaScript枚举选择jquery插件代码实例
2020/11/17 jQuery
[04:10]2016国际邀请赛中国区预选赛第二日TOP10精彩集锦
2016/06/28 DOTA
[53:10]2018DOTA2亚洲邀请赛 4.6 淘汰赛 VP vs VG 第一场
2018/04/11 DOTA
基于Python的身份证号码自动生成程序
2014/08/15 Python
复习Python中的字符串知识点
2015/04/14 Python
pandas DataFrame 警告(SettingWithCopyWarning)的解决
2019/07/23 Python
利用python实现AR教程
2019/11/20 Python
Python3.9又更新了:dict内置新功能
2020/02/28 Python
tensorflow常用函数API介绍
2020/04/19 Python
CSS3实现swap交换动画
2016/01/19 HTML / CSS
飞利浦西班牙官方网站:Philips西班牙
2020/02/17 全球购物
酒店端午节促销方案
2014/02/18 职场文书
结婚当天新郎保证书
2015/05/08 职场文书
2015年幼儿园班主任个人工作总结
2015/10/22 职场文书
无线电通信名词解释
2022/02/18 无线电
我国拿下天问一号火星着陆区附近 22 个地理实体命名:平乐、西柏坡、古田、漠河等
2022/04/29 数码科技