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

标签 python sockets

伙计们,我正在尝试使用一个简单的端口扫描器来验证端口是打开还是关闭,使用 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

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

关于python - 循环在 socket.connect_ex() 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43653134/

相关文章:

python - 如何在谷歌colab中安装web3

python - 使用变量调用 mongo 集合

sockets - 从 'struct sock'导出套接字fd

perl(良好实践): lexical filehandle for socket

java - Spring 集成 IP - 通过套接字在消息末尾省略回车符 (\r\n)

python - 在转换后的 tflite 模型上调用 `allocate_tensors()` 时出现运行时错误

python - 如何使用 Tesseract 对图像进行 OCR

python - 在卫星 map 上绘制数据

javascript - 了解 websocket(存储?)

Linux Socket::connect 和 QT::connect 混合