FEATURED · 精选文章

Ubuntu网络端口查看与监控实用指南

发布时间 / 2026/8/15 3:15:06
来源 / 创域科博编辑部
栏目 / 资讯中心
Ubuntu网络端口查看与监控实用指南 1. Ubuntu网络端口查看全指南在Linux系统管理中网络端口监控是每个运维人员必备的基础技能。当我们需要排查服务连通性问题、分析网络流量或检查安全风险时第一件事往往就是确认哪些端口正在被使用。Ubuntu作为最流行的Linux发行版之一提供了多种工具来完成这个任务。本文将详细介绍三种最实用的端口查看方法经典的netstat命令、更现代的ss工具以及lsof这个全能型选手。无论你是刚接触Ubuntu的新手还是需要快速排查问题的资深管理员这些方法都能帮你快速锁定目标端口。我们不仅会讲解基础用法还会深入一些高级技巧比如如何过滤特定协议的连接、识别占用端口的进程以及解读那些晦涩的状态标志。2. 工具选型与基础原理2.1 网络端口监控的核心需求在开始实操之前我们需要明确几个关键概念。网络端口本质上是系统用于区分不同网络通信的虚拟端点范围从0到65535。其中0-1023是知名端口如80用于HTTP1024-49151是注册端口剩下的49152-65535是动态/私有端口。端口查看工具的核心功能就是展示这些端点当前的占用状态哪些端口正在监听连接服务端哪些已经建立了连接客户端以及这些连接对应的进程信息。这对于以下场景特别重要服务部署时检查端口冲突网络安全审计网络性能问题排查异常连接检测2.2 工具对比netstat vs ss vs lsof虽然这三个工具都能查看端口但各有侧重工具特点适用场景性能netstat功能全面输出直观常规检查兼容性要求高较差ss直接从内核获取信息速度快大规模连接分析性能敏感场景优秀lsof能关联文件和进程信息维度最丰富深度排查需要进程详情时中等提示在较新的Ubuntu版本中官方推荐使用ss替代netstat因为后者已经逐渐被弃用。但netstat的语法对初学者更友好所以仍然值得学习。3. netstat经典工具深度解析3.1 基础命令与输出解读最基础的netstat命令不需要任何参数netstat但这样输出的信息过于庞杂。更实用的方式是结合以下参数netstat -tulnp这个组合的意思是-t显示TCP连接-u显示UDP连接-l仅显示监听中的端口-n以数字形式显示地址和端口避免耗时的主机名解析-p显示关联的进程信息典型输出如下Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1234/sshd tcp6 0 0 :::80 :::* LISTEN 5678/apache2 udp 0 0 0.0.0.0:68 0.0.0.0:* 910/dhclient关键字段解析Proto协议类型TCP/UDPLocal Address本地IP和端口0.0.0.0表示所有接口State连接状态LISTEN表示正在监听PID/Program name占用端口的进程信息3.2 高级用法与实战技巧过滤特定端口netstat -tulnp | grep :80\\确保只匹配以80结尾的端口避免匹配8080等查看所有活跃连接包括已建立的netstat -antp-a显示所有连接不仅是监听中的统计各状态的连接数netstat -ant | awk /^tcp/ {print $6} | sort | uniq -c输出示例10 ESTABLISHED 2 LISTEN 3 TIME_WAIT持续监控端口变化watch -n 1 netstat -tulnp每1秒刷新一次端口状态注意事项netstat在较新内核上可能效率较低特别是在连接数很多如超过1万时会明显拖慢系统。这时应该考虑使用ss命令。4. ss新一代高效工具4.1 基础用法对比ss命令的语法与netstat类似但更高效。基本等价命令ss -tulnp参数含义与netstat完全一致但执行速度通常快数倍。这是因为ss直接从内核空间获取信息而netstat需要遍历多个/proc文件。4.2 独有特性详解按状态过滤连接ss -t state established可用的状态包括establishedsyn-sentsyn-recvfin-wait-1fin-wait-2time-waitclosedclose-waitlast-acklisteningclosing显示进程的cgroup信息ss -tmp-m显示内存使用情况-p显示进程信息查看特定进程的所有连接ss -tnp src :22查找源端口为22的所有TCP连接4.3 性能对比实测在连接数超过5万的测试环境中netstat -ant 耗时约12秒ss -ant 耗时仅0.3秒差异主要来自netstat需要解析/proc/net/tcp等文件ss直接通过netlink socket与内核通信netstat的进程信息查找效率较低实操心得在编写监控脚本或处理高负载系统时务必使用ss替代netstat。我曾在一个Kubernetes节点上因为使用netstat导致监控进程自己成了性能瓶颈。5. lsof全能型端口分析工具5.1 基础端口查看虽然lsof主要设计用于查看文件打开情况但它也能完美胜任端口监控lsof -i -P -n参数说明-i列出网络连接-P禁止端口到服务名的转换显示数字端口-n禁止IP到主机名的转换典型输出COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME sshd 1234 root 3u IPv4 12345 0t0 TCP *:22 (LISTEN) apache2 5678 www-data 4u IPv6 67890 0t0 TCP *:80 (LISTEN)5.2 高级过滤技巧查看特定端口lsof -i :80查看特定协议的连接lsof -i TCP查看特定用户的网络活动lsof -i -u root组合查询lsof -i TCP:22-30 -u root -a查找root用户使用的22-30范围内的TCP端口5.3 深度关联分析lsof最强大的地方在于它能关联各种系统资源。例如查找某个进程打开的所有网络连接和文件lsof -p 1234或者查找谁在使用某个文件lsof /var/log/nginx/access.log避坑指南lsof的输出可能非常详细在连接数多的系统中建议始终配合grep等工具过滤。我曾不小心在一个生产环境直接运行lsof结果输出了数万行差点把终端卡死。6. 综合应用与问题排查6.1 端口冲突解决方案当遇到Address already in use错误时快速定位冲突sudo lsof -i :8080然后根据输出的PID可以选择终止进程sudo kill -9 PID或者调整服务配置使用其他端口。6.2 检测异常连接定期检查非预期的外部连接ss -antp | grep -v 127.0.0.1 | grep -v ::1这个命令会过滤掉本地连接只显示外部通信。6.3 服务连通性测试确认端口是否真的可访问telnet localhost 22或者使用更现代的ncnc -zv localhost 226.4 常见状态解析理解连接状态对排查问题至关重要状态含义常见场景LISTEN正在等待连接服务正常运行时ESTABLISHED已建立的活跃连接客户端与服务端通信中TIME_WAIT连接正在关闭2MSL阶段大量短连接时可能堆积CLOSE_WAIT远程端已关闭本地未关闭通常表示应用未正确关闭连接7. 自动化监控方案对于需要长期监控的场景可以设置定期检查7.1 基础监控脚本#!/bin/bash DATE$(date %Y-%m-%d_%H-%M-%S) LOG_FILE/var/log/port_monitor_$DATE.log ss -tulnp $LOG_FILE grep -q LISTEN $LOG_FILE || echo 警告没有监听端口 | mail -s 端口监控警报 adminexample.com7.2 使用systemd定时任务创建服务文件/etc/systemd/system/port-monitor.service[Unit] DescriptionPort Monitoring Service [Service] ExecStart/path/to/monitor_script.sh创建定时器/etc/systemd/system/port-monitor.timer[Unit] DescriptionRun port monitor hourly [Timer] OnCalendarhourly Persistenttrue [Install] WantedBytimers.target启用定时器sudo systemctl enable --now port-monitor.timer7.3 进阶Prometheus监控对于大规模环境可以使用专业的监控系统。例如通过node_exporter的textfile收集器ss -tulnp | awk ... /var/lib/node_exporter/port_stats.prom然后在Prometheus中配置相应的告警规则。8. 安全最佳实践端口管理不仅关乎功能也直接影响系统安全最小化监听端口关闭不需要的服务sudo systemctl disable --now unused-service使用防火墙限制访问sudo ufw allow 22/tcp sudo ufw enable定期审计建立端口变更基线监控异常变化# 生成基线 ss -tulnp ~/port_baseline.txt # 比较变化 diff ~/port_baseline.txt (ss -tulnp)敏感端口保护对SSH等管理端口考虑修改默认端口号使用密钥认证配置fail2ban监控工具自身安全确保像netstat这样的诊断工具没有被恶意替换which netstat ls -l /usr/bin/netstat在实际运维中我发现很多安全问题都源于对端口状态的忽视。一个典型的案例是某个开发环境中的Redis服务意外暴露在了公网因为没有配置防火墙导致被入侵挖矿。通过定期端口审计这类问题完全可以避免。
RELATED — 相关阅读

相关资讯

LATEST — 最新资讯

最新发布

TODAY — 本日精选

新闻

WEEKLY — 本周精选

新闻

MONTHLY — 本月精选

新闻