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,如需转载请自行联系原作者