人們,我想要一個簡單的端口掃描儀來驗證端口是否打開或關閉使用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