이 기사에서는 Python을 사용하여 LAN이 종료되지 않은 것을 계산하고 Excel 테이블(샘플 코드)을 생성하는 스크립트를 작성하는 방법을 소개합니다.
#!/udict/bin/env python # -*- coding: utf_8 -*- #Date:2016/10/17 #Author:wangpeng #blog:http://wangpengtai.blog.51cto.com import subprocess import nmap import time,datetime import xlrd,xlsxwriter,xlwt import os,sys from xlutils.copy import copy from multiprocessing import Pool def ip_scan(ip): global nm p = subprocess.Popen("ping -c 1 -t 1 "+ip,stdin = subprocess.PIPE, stdout = subprocess.PIPE, stderr = subprocess.PIPE, shell = True) output = p.stdout.read() #print output #the local time dtime = time.strftime("%Y/%m/%d %X",time.localtime()) nm = nmap.PortScanner() if "100% packet loss" not in output: nm.scan(ip,arguments='-O -sS -sU -F') try: dict = {'status':'up','IP':ip,'OS':str(nm[ip]['osmatch'][0]['name']),'Mac':str(nm[ip]['vendor'].keys()[0]),'Hostname':str(nm[ip]['hostnames'][0]['name']),'Datetime':dtime} #print dict #addResult(dict,filename,table) #print 'IP:%s,dict:%s' %(ip,dict) except: try: dict = {'status':'up','IP':ip,'OS':str(nm[ip]['osmatch'][0]['name']),'Mac':'','Hostname':str(nm[ip]['hostnames'][0]['name']),'Datetime':dtime} except: dict = {'status':'up','IP':ip,'OS':'','Mac':str(nm[ip]['addresses']['mac']),'Hostname':str(nm[ip]['hostnames'][0]['name']),'Datetime':dtime} print ip #print "####error!####" #print dict #pass addResult(dict,filename,table) else: print 'ip:%s--->down!' %ip dict = {'status':'down','IP':ip,'OS':'','Mac':'','Hostname':'','Datetime':dtime} addResult(dict,filename,table) def count_rows(filename): data = xlrd.open_workbook(filename) table = data.sheets()[0] nrows = table.nrows return nrows #create a excel table def addResult(dict,filename,table): #pick up the key from dict and make it title to excel title = dict.keys() #sort the key title.sort() clo_num = len(dict.keys()) styleBoldRed = xlwt.easyxf('font: color-index red, bold on') headerStyle = styleBoldRed if not os.path.exists(filename): wb = xlwt.Workbook() ws = wb.add_sheet('count') for i in range(clo_num): ws.write(0,i,title[i],headerStyle) ws.write(1,i,dict[title[i]]) wb.save(table) else: oldWb = xlrd.open_workbook(table,formatting_info = True) newWb = copy(oldWb) newWs = newWb.get_sheet(0) num = count_rows(filename) for i in range(clo_num): newWs.write(num,i,dict[title[i]]) newWb.save(table) def start(): global filename global table t_date = datetime.date.today().strftime("%Y_%m_%d") t_name = 'report_%s.xls' %(t_date) filename = r'/home/python/%s' %(t_name) ip_list = [] for i in range(1,255): ip_list.append('172.20.113.'+str(i)) #print ip_list print("please wait...") #计算时间 time_start=time.time() #创建线程 for ip in ip_list: # pid = os.fork() # if not pid: ip_scan(ip) #sys.exit() time_end=time.time() t=time_end-time_start print '*'*48 print '\nTime:'+str(t)+'s' print 'Scan results have been saved to test.\n' print '*'*48 if __name__ == '__main__': """ filename = r'/home/wangpeng/python/test1.xls' table = 'test1.xls' ip_list = ['172.20.113.57','172.20.113.47','172.20.113.10'] for ip in ip_list: ip_scan(ip) """ start()
위 내용은 Python을 사용하여 종료되지 않은 LAN에서 통계를 수집하고 Excel 테이블을 생성하는 스크립트 작성(샘플 코드)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!