1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
|
#!/usr/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()
|
本文转自 wangpengtai 51CTO博客,原文链接:http://blog.51cto.com/wangpengtai/1904855,如需转载请自行联系原作者