Python 多线程端口扫描器
Python port scanner with multithreading
import threading, socket, sys, time
from queue import Queue
print_lock = threading.Lock()
if len(sys.argv) !=2 :
print ("Usage: portscan.py <host>")
sys.exit(1)
host = sys.argv[1]
def scan(port):
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
con = s.connect((host, port))
with print_lock:
print('Port: ' + str(port) + ' is open')
con.close()
except:
pass
def threader():
while true:
worker = q.qet()
scan(worker)
q.task_done()
q = Queue()
for x in range(100):
t = threading.Thread(target=threader)
t.daemon = True
t.start
for worker in range(1, 1024):
q.put(worker)
q.join()
当我 运行 它时,它只是挂起,我没有得到任何结果,也没有给我任何错误。我不明白为什么它不起作用。当我不添加线程功能时它确实有效。
for x in range(100):
t = threading.Thread(target=threader)
t.daemon = True
t.start() # <--- you have to call start? or is this a typo
三个小错误:
- 虽然正确
- t.start()
- q.get()
这个更正后的代码似乎对我有用:
import threading, socket, sys, time
from queue import Queue
print_lock = threading.Lock()
if len(sys.argv) !=2 :
print ("Usage: portscan.py <host>")
sys.exit(1)
host = sys.argv[1]
def scan(port):
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
con = s.connect((host, port))
with print_lock:
print('Port: ' + str(port) + ' is open')
con.close()
except:
pass
def threader():
while True:
worker = q.get()
scan(worker)
q.task_done()
q = Queue()
for x in range(100):
t = threading.Thread(target=threader)
t.daemon = True
t.start()
for worker in range(1, 1024):
q.put(worker)
q.join()
import threading, socket, sys, time
from queue import Queue
print_lock = threading.Lock()
if len(sys.argv) !=2 :
print ("Usage: portscan.py <host>")
sys.exit(1)
host = sys.argv[1]
def scan(port):
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
con = s.connect((host, port))
with print_lock:
print('Port: ' + str(port) + ' is open')
con.close()
except:
pass
def threader():
while true:
worker = q.qet()
scan(worker)
q.task_done()
q = Queue()
for x in range(100):
t = threading.Thread(target=threader)
t.daemon = True
t.start
for worker in range(1, 1024):
q.put(worker)
q.join()
当我 运行 它时,它只是挂起,我没有得到任何结果,也没有给我任何错误。我不明白为什么它不起作用。当我不添加线程功能时它确实有效。
for x in range(100):
t = threading.Thread(target=threader)
t.daemon = True
t.start() # <--- you have to call start? or is this a typo
三个小错误:
- 虽然正确
- t.start()
- q.get()
这个更正后的代码似乎对我有用:
import threading, socket, sys, time
from queue import Queue
print_lock = threading.Lock()
if len(sys.argv) !=2 :
print ("Usage: portscan.py <host>")
sys.exit(1)
host = sys.argv[1]
def scan(port):
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
con = s.connect((host, port))
with print_lock:
print('Port: ' + str(port) + ' is open')
con.close()
except:
pass
def threader():
while True:
worker = q.get()
scan(worker)
q.task_done()
q = Queue()
for x in range(100):
t = threading.Thread(target=threader)
t.daemon = True
t.start()
for worker in range(1, 1024):
q.put(worker)
q.join()