[英]How to fix the problem with lists in python 3.6?
我编写了一个用于端口扫描的python程序
这是我的源代码
import socket
t_host = str(input("Enter the host to be scanned: "))
t_ip = socket.gethostbyname(t_host)
print(t_ip)
list=[1,3,4,6,7,9,13,17,19,20,21,22,23,24,25,26,30,32,33,37,42,43,49,53,70,79,80,81,82,83,84,85,88,89,90,99,100,106,109,110,111,113,119,125,135,139,143,144,146,161,163,179,199,211,212,222,254,255,256,259,264,280,301,306,311,340,366,389,40]
sock = socket.socket()
sock.settimeout(1)
for item in list:
t_port=int(item)
result = sock.connect_ex((t_ip,t_port))
if result == 0:
print("Port",t_port,": Opened")
else:
print("port",t_port,": Closed")
sock.close()
print("Port Scanning complete")
当我在列表中使用单个项目时,它会扫描并正确打开/关闭端口。(即)列表中的第一个项目被正确评估,而剩余的未评估为正确地打开或关闭
例如。 list=[80]
它给出正确打开的输出。
但是,如果列表中包含多个项目,则所有端口均显示为“已关闭”
例如。 list=[80,23,443,25]
它将输出作为port 80 : Opened
但其余已关闭
您不能将同一套接字用于多个连接。 每次循环时都需要创建一个新的套接字。
for item in list:
t_port=int(item)
sock = socket.socket()
sock.settimeout(1)
result = sock.connect_ex((t_ip,t_port))
if result == 0:
print("Port",t_port,": Opened")
else:
print("port",t_port,": Closed")
sock.close()
从socket.close()
的文档中:
套接字对象上所有以后的操作都将失败。
您的问题与端口列表无关,而是与您多次使用的套接字对象有关。
套接字一旦关闭, 便无法重用 :
将插座标记为关闭。 当关闭makefile()中的所有文件对象时,基础系统资源(例如文件描述符)也将关闭。 一旦发生这种情况,套接字对象上的所有将来操作都会失败。 远端将不再接收任何数据(在清除排队的数据之后)。
您可能需要为每个扫描端口创建一个新的套接字:
import socket
t_host = str(input("Enter the host to be scanned: "))
t_ip = socket.gethostbyname(t_host)
print(t_ip)
list=[1,3,4,6,7,9,13,17,19,20,21,22,23,24,25,26,30,32,33,37,42,43,49,53,70,79,80,81,82,83,84,85,88,89,90,99,100,106,109,110,111,113,119,125,135,139,143,144,146,161,163,179,199,211,212,222,254,255,256,259,264,280,301,306,311,340,366,389,40]
for item in list:
t_port=int(item)
# create a new socket for each port scanned
sock = socket.socket()
sock.settimeout(1)
# probe port
result = sock.connect_ex((t_ip,t_port))
if result == 0:
print("Port",t_port,": Opened")
else:
print("port",t_port,": Closed")
sock.close()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.