【发布时间】:2016-03-10 19:01:35
【问题描述】:
我拼凑了一个自动 vnc 扫描仪。它循环访问 IP 地址,如果检测到开放的 5900 端口,它会尝试截屏。它不漂亮,结构也很差,但它确实有效。然而它很慢。我已经尝试过线程化进程,但我一直在苦苦挣扎。你可以看到我已经添加了一个计时器,所以我可以看到扫描 30 个 ip 需要多长时间。我尝试了多种类型的线程和线程库。当前的迭代可能是我用过的最快的迭代,但它只比没有线程快几秒钟。如果您能提供一些反馈,我将不胜感激。
非常感谢
import socket
import nmap
from vncdotool import *
from ipaddress import *
import pexpect
import time
from multiprocessing import Pool, freeze_support
from multiprocessing.dummy import Pool as ThreadPool
import itertools
def vncconnect(tgtHost):
try:
ip = str(tgtHost)
command = 'vncdotool -v -s ' + ip + ' --delay=1000 capture %s' % (ip + '.jpg')
child = pexpect.spawn(command)
child.expect ('INFO:root:connecting')
time.sleep (10)
print 'attempting screenshot on ' + ip
child.expect (pexpect.EOF)
except:
pass
def nmapScan(tgtHost,tgtPort):
try:
nmScan = nmap.PortScanner()
result = nmScan.scan(str(tgtHost),str(tgtPort))
if (result['nmap']['scanstats']['uphosts'] == '1'):
print 'Trying ' + tgtHost + ' - appears open: attempting to connect'
vncconnect(tgtHost)
f = open('database', 'r+')
f.write(tgtHost + ' Banner: ' + result['scan']['190.81.24.103']['tcp'][5900]['name'] + result['scan']['190.81.24.103']['tcp'][5900] / ['version'] + '/n')
else:
print 'Trying ' + tgtHost + ' - is not open'
except:
pass
def main():
net4 = IPv4Address(u'170.0.0.0')
y = 0
start = time.time()
numberofhoststoscan = 30
while y < numberofhoststoscan:
try:
port = '5900'
y = y + 1
z = str(net4)
nmapScan(z, port)
net4 = net4 + 1
except:
pass
net4 = net4 + 1
end = time.time()
total = (end - start)
print 'total scan time = ' + str(total) + ', scanned ' + str(numberofhoststoscan) + ' hosts'
if __name__ == "__main__":
freeze_support()
pool = ThreadPool(4)
pool.map(main())
pool.close()
pool.join()
【问题讨论】:
-
pool.map(main())应该实现什么?它同步调用main(),然后调用pool.map(None)。 -
刚刚注意到。您的代码根本没有使用线程。
标签: python multithreading python-multithreading