关于python:循环不能在socket.connect_ex()中工作

Loop not working in socket.connect_ex()

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

我的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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:

1
2
open 193.169.10.100
closed 193.169.10.101

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


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

1
2
3
4
5
6
7
8
9
10
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

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