【发布时间】:2013-05-27 20:20:10
【问题描述】:
是的,是的,我知道我可以只使用 nmap,但我想自己尝试一下。
我正在尝试编写一个线程脚本来查找目标 IP 地址上的开放端口。这就是我现在拥有的:
import socket, Queue
from threading import Thread
print "Target to scan: "
targetIP = raw_input("> ")
print "Number of threads: "
threads = int(raw_input("> "))
q = Queue.Queue()
# Fill queue with port numbers
for port in range(1, 1025):
q.put(port)
def scan(targetIP, port):
try:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.settimeout(4)
result = s.connect_ex((targetIP, port))
if result == 0:
print 'Port {0} is open'.format(port)
s.close
q.task_done()
while q.full:
for i in range(threads):
port = q.get()
t = Thread(target=scan, args =(targetIP, port))
t.daemon = True
t.start()
但是我有几个问题:
1) 当我按原样运行时,它会遍历端口队列,但随后会挂起,即使队列为空,也不会从 while 循环中中断。
2) 如果我向scan 添加打印行以查看发生了什么,基本上在开头添加“扫描端口 X”行并在末尾添加print result 行,stdout 会被“扫描端口”淹没" 队列中所有端口的行,然后打印结果行。意思是,目前脚本似乎没有等待result 获取值,而是继续迭代,就好像它已经完成了一样。
我在这里做错了什么?
【问题讨论】:
-
Meaning, it looks like currently the script is not waiting for result to get a value, and just continue iterating on as if it had.意思是,脚本在多个线程中运行而不是按顺序运行?这不正是你想要的吗? -
等待直到
q.full为假。你没有调用函数...
标签: python multithreading sockets python-2.7