はい、はい、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
、キューが空になってもループから抜け出すことはありません。
scan
2)何が起こっているかを確認するために印刷行を追加すると、基本的に最初に「スキャンポートX」行を追加print result
し、最後に行を追加すると、stdoutはキュー内のすべてのポートの「スキャンポート」行であふれます。結果の行が出力されます。つまり、現在、スクリプトはresult
値の取得を待機しておらず、取得したかのように繰り返し処理を続けているようです。
ここで何が間違っていますか?