菜鸟科技网

如何快速检查服务器开放的端口?

在网络安全管理和系统运维中,检查开放的端口是识别服务暴露面、排查潜在风险的基础操作,不同操作系统和场景下,检查开放端口的命令各有侧重,本文将详细介绍常用命令及其使用方法,涵盖Windows、Linux/macOS系统,以及针对特定协议的深度检查工具。

如何快速检查服务器开放的端口?-图1
(图片来源网络,侵删)

Windows系统常用端口检查命令

Windows系统提供了多种命令行工具用于端口检查,适合不同需求场景。

netstat命令

netstat是Windows内置的传统网络状态工具,功能全面,支持查看TCP、UDP端口状态及连接详情。

  • 基本语法netstat [参数]
  • 常用参数
    • -a:显示所有连接和监听端口;
    • -n:以数字形式显示地址和端口,避免DNS解析,加快速度;
    • -t:仅显示TCP连接;
    • -u:仅显示UDP连接;
    • -p:显示进程ID(PID)和进程名(需管理员权限);
    • -b:显示创建每个连接的组件(需管理员权限)。
  • 示例
    • 查看所有TCP/UDP连接:netstat -an
    • 查看监听端口及对应进程:netstat -ano | findstr "LISTENING"
    • 查看特定端口(如80端口)状态:netstat -ano | findstr ":80"

Get-NetTCPConnection(PowerShell)

PowerShell提供了更现代化的网络连接管理命令,支持对象化输出,便于后续处理。

  • 基本语法Get-NetTCPConnection [参数]
  • 常用参数
    • LocalPort:筛选本地端口;
    • State:筛选连接状态(如ListenEstablished);
    • IncludeProcess:显示进程信息。
  • 示例
    • 查看所有监听端口及进程:Get-NetTCPConnection -State Listen | Select-Object LocalAddress, LocalPort, OwningProcess
    • 通过PID查找进程名:Get-Process -Id (Get-NetTCPConnection -LocalPort 80).OwningProcess

Test-NetConnection(PowerShell)

用于测试目标主机的端口连通性,适合快速检查端口是否可访问。

如何快速检查服务器开放的端口?-图2
(图片来源网络,侵删)
  • 基本语法Test-NetConnection -ComputerName <主机名> -Port <端口号>
  • 示例Test-NetConnection -ComputerName 192.168.1.1 -Port 443,返回端口是否开放及网络延迟等信息。

Linux/macOS系统常用端口检查命令

Linux/macOS系统下,ssnetstat是主流工具,其中ss因性能更优逐渐替代netstat

ss命令(推荐)

ss是Linux内核提供的新工具,查询速度更快,支持显示更多网络统计信息。

  • 基本语法ss [参数]
  • 常用参数
    • -t:TCP端口;
    • -u:UDP端口;
    • -l:仅显示监听端口;
    • -n:数字形式显示地址和端口;
    • -p:显示进程ID和命令名;
    • -a:显示所有端口。
  • 示例
    • 查看所有监听端口:ss -tulnp
    • 查看特定端口(如22端口):ss -tulnp | grep ":22"

netstat命令(兼容性更好)

在Linux/macOS中,netstat参数与Windows类似,但默认可能未安装(需通过net-tools包安装)。

  • 示例netstat -tulnp | grep ":3306"(查看MySQL的3306端口状态)。

lsof命令

lsof(list open files)可查看进程打开的文件,包括网络端口。

如何快速检查服务器开放的端口?-图3
(图片来源网络,侵删)
  • 基本语法lsof -i [协议]:[端口号]
  • 示例
    • 查看监听80端口的进程:lsof -i :80
    • 查看所有TCP端口:lsof -i TCP

跨平台及高级端口检查工具

nmap(网络探测工具)

nmap是功能强大的端口扫描工具,支持端口状态探测、服务识别、脚本扫描等。

  • 基本语法nmap [参数] <目标IP/域名>
  • 常用参数
    • -sT:TCP连接扫描(全扫描);
    • -sU:UDP扫描;
    • -sS:TCP SYN扫描(半扫描,需root权限);
    • -p:指定端口范围(如-p 1-1000);
    • -O:操作系统检测;
    • -sV:服务版本检测。
  • 示例
    • 扫描目标主机的开放端口:nmap 192.168.1.1
    • 扫描特定端口范围并显示服务版本:nmap -sV -p 80,443,8080 192.168.1.1

telnet/nc(netcat)

快速测试端口连通性,适合简单验证。

  • telnettelnet <目标IP> <端口号>(如telnet 192.168.1.1 80
  • ncnc -zv <目标IP> <端口号>(如nc -zv 192.168.1.1 22

端口状态说明

状态 说明
LISTEN 端口处于监听状态,等待连接请求(如服务端开放端口)
ESTABLISHED 已建立连接,数据可传输(如客户端已连接到服务端)
TIME_WAIT 连接关闭后等待一段时间,确保数据传输完成(常见于TCP连接)
CLOSED 端口未开放或连接已关闭

注意事项

  1. 权限要求:部分命令(如Windows的netstat -b、Linux的ss -p)需要管理员/root权限才能显示进程信息。
  2. 端口范围:0-1023为知名端口(需特殊权限),1024-49151为注册端口,49152-65535为动态/私有端口。
  3. 防火墙影响:防火墙可能阻止端口访问,检查端口时需确认防火墙规则。

相关问答FAQs

Q1: 为什么使用ss命令比netstat更高效?
A1: ss命令直接从Linux内核获取网络套接字信息,而netstat需要通过/proc文件系统解析数据,因此在处理大量连接时,ss的查询速度更快,资源占用更低,尤其适合高并发场景。

Q2: 如何判断端口被哪个程序占用?
A2:

  • Windows:使用netstat -ano | findstr ":端口号"获取PID,再通过tasklist | findstr "PID"或任务管理器查看进程名;
  • Linux/macOS:使用ss -tulnp | grep ":端口号"lsof -i :端口号直接显示进程信息。
    若需终止占用进程,可使用taskkill /PID PID号 /F(Windows)或kill -9 PID号(Linux)。
分享:
扫描分享到社交APP
上一篇
下一篇