在Linux系统中,测试端口是网络管理、服务调试和安全排查的常见操作,主要用于确认端口是否开放、服务是否正常运行、网络连通性是否正常等,以下是常用的端口测试方法及工具详解,涵盖基础命令到专业工具的使用场景和操作示例。

使用netstat命令检查端口状态
netstat是传统的网络工具,用于显示网络连接、路由表、接口统计等信息,通过它可以快速查看本地端口监听状态。
基本语法
netstat [选项] [参数]
常用选项及示例
-
查看所有监听的TCP和UDP端口(不解析主机名和服务名,显示数字形式)
netstat -tuln
输出说明:
-t:显示TCP端口-u:显示UDP端口-l:仅显示监听状态的端口-n:以数字形式显示地址和端口,避免DNS解析,提高速度
-
查看监听端口的进程ID和名称
netstat -tulnp
示例输出:
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1234/sshd其中
1234是进程ID,sshd是进程名,可通过kill 1234或systemctl restart sshd管理服务。 -
查看所有网络连接(包括监听和已建立连接)
netstat -an
输出中
ESTABLISHED表示已建立连接,LISTEN表示监听状态,TIME_WAIT表示连接等待关闭。
注意事项
netstat在处理大量连接时速度较慢,现代Linux系统推荐使用ss替代(后文详述)。
使用ss命令高效查看端口状态
ss是iproute2包中的工具,基于内核netlink接口直接获取网络信息,速度远快于netstat,是当前Linux系统推荐的网络连接查看工具。
基本语法
ss [选项] [过滤条件]
常用选项及示例
-
查看所有监听的TCP/UDP端口
ss -tuln
参数与
netstat一致,-t(TCP)、-u(UDP)、-l(监听)、-n(数字形式)。 -
查看监听端口的进程信息
ss -tulnp
示例输出:
State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 *:22 *:* users:(("sshd",pid=1234,fd=3))users字段显示占用端口的进程详情。 -
过滤特定端口

ss -tln 'sport = :22' # 查看TCP 22端口监听状态 ss -uln 'dport = :53' # 查看UDP 53端口的目标连接
过滤条件支持
sport(源端口)、dport(目标端口)、state(连接状态)等,如state ESTABLISHED仅显示已建立的连接。
优势对比
| 特性 | netstat | ss |
|---|---|---|
| 信息获取方式 | /proc文件系统 | 内核netlink接口 |
| 速度 | 较慢 | 快 |
| 过滤功能 | 基础 | 强大 |
| 兼容性 | 所有系统 | �新系统(需安装iproute2) |
使用telnet测试端口连通性
telnet是简单的TCP协议测试工具,用于验证目标端口是否可访问(仅支持TCP,不加密)。
基本语法
telnet [IP地址] [端口号]
操作示例
-
测试本地80端口是否开放
telnet localhost 80
成功连接后显示:
Trying 127.0.0.1... Connected to localhost. Escape character is '^]'.输入
^](Ctrl+])进入telnet命令模式,输入quit退出。 -
测试远程主机22端口
telnet 192.168.1.100 22
若连接失败,可能原因包括:目标服务未启动、防火墙拦截、网络不通。
局限性
- 仅支持TCP协议,无法测试UDP端口。 不加密,存在安全风险,现多用于临时测试。
使用nc(netcat)灵活测试端口
nc(netcat)是“网络工具中的瑞士军刀”,支持TCP/UDP端口监听、连接、数据传输等功能,比telnet更灵活。
基本语法
nc [选项] [IP] [端口]
常用场景及示例
-
测试TCP端口连通性
nc -zv 192.168.1.100 80
-z:仅扫描端口,不发送数据;-v:显示详细输出。
成功输出:Connection to 192.168.1.100 80 port [tcp/http] succeeded! -
测试UDP端口
nc -uzv 192.168.1.100 53
-u:指定UDP协议。 -
本地临时监听端口
nc -l -p 1234 # 监听本地1234端口,接收数据
在另一终端执行
nc localhost 1234发送数据,可测试端口是否可被访问。
优势
支持TCP/UDP,可交互传输数据,适合调试端口转发或服务响应。
使用nmap专业端口扫描
nmap(Network Mapper)是开源的网络探测和安全审核工具,支持高级端口扫描(如SYN扫描、UDP扫描)、服务版本探测、操作系统检测等,适合安全审计和深度排查。

安装(若未安装)
# Debian/Ubuntu sudo apt install nmap # CentOS/RHEL sudo yum install nmap
基本语法
nmap [选项] [扫描目标]
常用选项及示例
-
扫描单个主机的开放端口
nmap -sT 192.168.1.100
-sT:TCP connect扫描(完整连接,无root权限也可用)。 -
扫描指定端口范围
nmap -p 1-1000 192.168.1.100 # 扫描1-1000端口 nmap -p 22,80,443 192.168.1.100 # 扫描指定端口
-
UDP端口扫描
nmap -sU 192.168.1.100
UDP扫描较慢,需耐心等待。
-
服务版本探测
nmap -sV 192.168.1.100
可识别端口运行的服务类型及版本(如
Apache/2.4.41)。 -
扫描结果保存
nmap -oN result.txt 192.168.1.100 # 保存为普通文本 nmap -oX result.xml 192.168.1.100 # 保存为XML格式
注意事项
- 扫描目标主机需获得授权,非法扫描可能违反法律。
- SYN扫描(
-sS)速度更快,但需要root权限,可能被防火墙拦截。
结合lsof排查端口占用进程
若端口被占用无法启动服务,可通过lsof(list open files)查看具体进程。
基本语法
lsof -i :[端口号]
示例
lsof -i :8080
输出:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 5678 root 3u IPv6 12345 0t0 TCP *:http-alt (LISTEN)
显示java进程(PID=5678)占用8080端口,可通过kill -9 5678终止进程(谨慎操作)。
端口测试常见场景排查
-
端口开放但无法访问
- 检查防火墙:
sudo ufw status(Ubuntu)或sudo firewall-cmd --list-ports(CentOS),开放端口(如sudo ufw allow 80)。 - 检查网络连通性:
ping IP测试主机是否可达,traceroute IP查看路由路径。
- 检查防火墙:
-
服务启动后端口未监听
- 检查服务状态:
systemctl status 服务名(如systemctl status nginx)。 - 查看服务日志:
journalctl -u 服务名定位错误原因(如配置文件错误、端口被占用)。
- 检查服务状态:
相关问答FAQs
Q1:telnet连接端口失败,可能的原因有哪些?如何排查?
A:可能原因包括:
(1)目标服务未启动(端口无进程监听);
(2)目标主机防火墙拦截(如iptables、firewalld规则阻止);
(3)网络连通性问题(路由错误、主机不可达);
(4)端口被其他进程占用;
(5)目标服务配置限制(如仅允许特定IP访问)。
排查步骤:
① 用ss -tulnp | grep 端口检查端口是否被监听;
② 用ping IP测试网络连通性;
③ 用telnet IP 端口结合tcpdump -i any port 端口抓包,确认是否到达目标主机;
④ 检查防火墙规则,临时关闭防火墙测试(sudo systemctl stop firewalld)。
Q2:ss和netstat有什么区别?为什么推荐使用ss?
A:区别主要体现在性能和功能上:
(1)性能:ss基于内核netlink接口直接获取网络信息,速度比netstat(通过/proc文件系统)快5-10倍,尤其在处理大量连接(如万兆服务器)时优势明显;
(2)功能:ss支持更丰富的过滤条件(如按端口、协议、进程状态过滤),输出格式更清晰,可直接显示进程ID和名称;netstat功能相对基础,仅支持基础过滤。
推荐使用ss的原因:现代Linux系统默认安装iproute2(包含ss),性能和功能均优于netstat,可高效完成端口状态查看和连接分析任务,旧系统若未安装ss,可通过yum install iproute或apt install iproute2安装。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/37475.html