Python查看电脑开启了哪些端口

在计算机网络中,端口(Port)是计算机上用于与外部设备或其他计算机通信的逻辑通道。在网络通信中,端口用于标识不同的应用程序或服务。每个端口都有一个唯一的数字编号,范围从0到65535。其中,0到1023的端口号被称为“系统端口”或“众所周知的端口”,用于一些特定的服务,比如HTTP(80端口)、FTP(21端口)等。而1024到65535的端口号则被称为“动态端口”或“私有端口”,用于一些自定义的应用程序或服务。

在实际应用中,我们经常需要查看当前计算机开启了哪些端口,以便进行网络配置、故障排查等操作。Python作为一门强大的脚本语言,提供了丰富的网络编程库和工具,可以方便地实现端口的查看和管理。

本文将介绍如何使用Python查看电脑开启了哪些端口,并提供相应的代码示例。

网络编程库

在Python中,有几个常用的网络编程库可以帮助我们实现端口的查看,其中包括socketpsutilnetstat等。

socket库

Python的标准库socket提供了一套通用的网络编程接口,可以用于创建Socket连接、发送和接收数据等操作。通过使用socket库,我们可以实现端口的查看和管理。

以下是使用socket库查看已经开启的端口的示例代码:

import socket

def get_open_ports():
    open_ports = []
    for port in range(1, 65536):
        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        result = sock.connect_ex(('localhost', port))
        if result == 0:
            open_ports.append(port)
        sock.close()
    return open_ports

if __name__ == '__main__':
    open_ports = get_open_ports()
    print("已开启的端口:", open_ports)

在上述代码中,我们通过循环遍历1到65535的端口号,使用socket库的connect_ex方法来尝试连接每个端口。如果连接成功(返回值为0),则说明该端口是开启状态,我们将其添加到open_ports列表中。最后,打印出已开启的端口。

psutil库

psutil是一个跨平台的进程和系统工具库,可以方便地获取系统信息和进程信息。其中,它提供了一个net_connections方法,可以获取当前网络连接的详细信息,包括端口号和状态等。

以下是使用psutil库查看已经开启的端口的示例代码:

import psutil

def get_open_ports():
    open_ports = []
    for conn in psutil.net_connections():
        if conn.status == 'ESTABLISHED':
            open_ports.append(conn.laddr.port)
    return open_ports

if __name__ == '__main__':
    open_ports = get_open_ports()
    print("已开启的端口:", open_ports)

在上述代码中,我们通过遍历psutil.net_connections()的返回结果,判断每个连接的状态是否为“ESTABLISHED”(已建立连接),如果是,则将该连接的本地端口号添加到open_ports列表中。最后,打印出已开启的端口。

netstat命令

netstat是一个用于显示网络连接、路由表和网络接口等网络相关信息的命令行工具。在Python中,我们可以使用subprocess模块来执行系统命令,并获取命令的输出结果。

以下是使用netstat命令查看已经开启的端口的示例代码:

import subprocess

def get_open_ports():
    output = subprocess.check_output(['netstat', '-ano'])
    open_ports = []
    for line in output.splitlines():
        fields = line.split()
        if len(fields) >= 2 and fields[-1] == 'LISTENING':
            port = fields[-2].split(':')[-1]
            open_ports.append(int(port))
    return open_ports

if __name__ == '__main__':
    open_ports = get_open_ports()
    print("已