繁体   English   中英

如何使用python 3.6中的列表解决问题?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM