Use python to write a script that counts LAN not shutting down and generate an excel table (sample code)

高洛峰
Release: 2017-03-10 14:15:41
Original
1860 people have browsed it

This article introduces the use of python to write a script that counts the local area network that is not shut down and generates an excel table (sample 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()
Copy after login

The above is the detailed content of Use python to write a script that counts LAN not shutting down and generate an excel table (sample code). For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template