Maison >développement back-end >Tutoriel Python >Utilisez Python pour écrire un script qui compte que le réseau local ne s'arrête pas et génère un tableau Excel (exemple de code)

Utilisez Python pour écrire un script qui compte que le réseau local ne s'arrête pas et génère un tableau Excel (exemple de code)

高洛峰
高洛峰original
2017-03-10 14:15:411908parcourir

Cet article présente l'utilisation de Python pour écrire un script qui compte que le réseau local ne s'arrête pas et génère un tableau Excel (exemple de code)

#!/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()

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn