Skip to main content
 首页 » 编程设计

python之循环在 socket.connect_ex() 中不起作用

2025年05月04日16lori

伙计们,我正在尝试使用一个简单的端口扫描器来验证端口是打开还是关闭,使用 socket.connect_ex((192.169.10.1, 80))
它工作正常但是我想传递多个 IP 和端口,所以我使用列表并使用 for 循环迭代它们。我只得到列表中第一个 IP 的结果,第二个 IP 没有给出正确的结果相反它总是运行 elif block ,可能是什么问题?有人可以指导我哪里出错了。

我的代码:

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) 

输出:

open 193.169.10.100 
closed 193.169.10.101 

但我敢肯定,两个端口都是开放的

请您参考如下方法:

您需要为每个(IP、端口)创建一个新套接字:

import socket 
 
ips = ['193.169.10.100', '193.169.10.101'] 
ports = [80, 80] 
 
for ip, port in zip(ips, ports): 
   sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
   result = sock.connect_ex((ip, port)) 
   sock.close() 
   assert result == 0 

完成后关闭套接字也是一个好习惯。