Python 3.x 用Python进行端口扫描

Python 3.x 用Python进行端口扫描,python-3.x,sockets,Python 3.x,Sockets,我正在学习如何使用Python和socket模块扫描端口 这就是我得到的: import socket, sys def check_ports_socket(ip, portlist): try: for port in portlist: sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.settimeout(5) res

我正在学习如何使用Python和
socket
模块扫描端口

这就是我得到的:

import socket, sys

def check_ports_socket(ip, portlist):
    try:
        for port in portlist:
            sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            sock.settimeout(5)
            result = sock.connect_ex((ip, port))
            if result == 0:
                print(f'Port {port}: \t Open')
            else:
                print(f'Port {port}: \t Closed')
            sock.close()
    except socket.error as e:
        print(str(e))
        print('Connection Error')
        sys.exit()

check_ports_socket('localhost', [80, 8080, 443, 9999])
问题是我故意打开了端口80和9999,以查看代码是否真的有效,对于这两个端口,它都返回“closed”


有人能解释一下吗?

这到底是什么意思“我故意打开了端口80和9999”?如果netstat-an没有返回这些端口的信息,那么您就没有“打开”它们。这意味着我运行了
sudoufw allow 80
和9999。如果您没有为这些端口提供服务的服务器,这意味着什么都没有……哦。。。。因此,打开端口对端口扫描没有任何影响,除非我实际为这些端口提供服务。
sudo ufw allow 80
不是打开端口,而是允许连接端口