人们,我想要一个简单的端口扫描仪来验证端口是否打开或关闭使用socket.connect_ex((192.169.10.1, 80))
它工作正常,但我想通过多个IP和端口,所以我用列表和使用for循环迭代它们。我得到的结果只是列表中的第一个IP,第二个IP没有给出正确的结果而是它总是运行elif块,可能是什么问题?有人能指导我哪里出错。循环不工作在socket.connect_ex()
我的代码:
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
iplst = ['193.169.10.100', '193.169.10.101']
ports = [80, 80]
for i,j in zip(iplst,ports):
result = sock.connect_ex((i,j))
if result == 0:
print("open" , i)
elif result != 0:
print("closed", i)
OUTPUT:
open 193.169.10.100
closed 193.169.10.101
但我敢肯定,这两个端口是开放的
有一件事是在成功的'connect'('connect_ex')后关闭套接字。检查'connect_ex'返回代码(包含'errno'值),它可能类似_Already connected_。 – CristiFati
我认为你需要每个(IP,端口)一个套接字 - 在'for'循环中移动创建套接字 – matino
@matino是合适的,对于混淆,在关闭套接字后它的描述符变得无效。您需要为每个(成功)连接创建一个新的套接字(不要忘记在完成时关闭它)。 – CristiFati