>백엔드 개발 >파이썬 튜토리얼 >Python을 사용하여 종료되지 않은 LAN에서 통계를 수집하고 Excel 테이블을 생성하는 스크립트 작성(샘플 코드)

Python을 사용하여 종료되지 않은 LAN에서 통계를 수집하고 Excel 테이블을 생성하는 스크립트 작성(샘플 코드)

高洛峰
高洛峰원래의
2017-03-10 14:15:411868검색

이 기사에서는 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.