Python中调用Ping命令,批量IP

#!/usr/bin/env python  #coding:UTF-8  '''''''
  Author: [email protected]
  可在命令行直接带目的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] %sn' % (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)