我正在尝试用 python 创建一个简单的端口扫描器 - 它尝试查看端口 0-10000 是否打开,然后将它们附加到一个数组中。但是,即使我打开一个端口,它仍然无法识别该端口已打开。
谢谢
代码:
import socket
import threading
ip = "127.0.0.1"
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #socket.AF_INET, socket.SOCK_STREAM
open_ports = []
def porttry(ip, port):
try:
s.connect((ip, port))
print("Port opened on %d" % port)
open_ports.append(port)
return True
except:
return None
for port in range(0, 10000):
threading.Thread(target=porttry,args=(ip,port)).start()
if port%100==0:
print(port)
最佳答案
要使此代码正常工作,您需要为每个连接(每个线程)单独创建套接字。
以下作品:
import socket
import threading
ip = "127.0.0.1"
open_ports = []
def porttry(ip, port):
try:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((ip, port))
print("Port opened on %d" % port)
open_ports.append(port)
s.close()
return True
except:
return False
for port in range(0, 10000):
threading.Thread(target=porttry, args=(ip,port)).start()
if port % 100 == 0:
print(port)
它检测使用例如nc -l 1777
打开的端口。
关于python - python 找不到开放端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37344457/