Python中调用Ping命令,批量IP

来源:互联网 发布:人肉搜索网络团队论坛 编辑:程序博客网 时间:2024/04/26 10:41
#!/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 argparseimport osimport platformimport time,datetimedef PingCmd():    cmdStr = ''    if platform.system()=='Linux':        cmdStr = 'ping -c 1 %s > /dev/null'    else:        cmdStr =  'ping -n 1 %s > nul'    return cmdStrdef 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  segListdef ParseSeg(aSeg):    segList = []    aList = aSeg.split('-')    if len(aList)==2:        segList = IPV4SegList(aList)    else:        segList = aList    return segListdef AddLineIP(IPList,aLine):    LineList = aLine.split(';')    for aSeg in LineList:        segList = ParseSeg(aSeg)        IPList += segList    return IPListdef 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 IPListdef 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)