【netstat和ss】Windows和Linux下的,网络连接排查简单案例
网络连接排查利器:netstat与ss命令详解
初识netstat:Windows下的网络连接查看工具
需要查看本机的网络连接情况时,Windows系统提供了一个非常实用的命令:netstat
。和findstr
组合形成一个有用的组合命令:
netstat -ano | findstr 50052
让我们分解这个命令:
netstat
:网络状态查看工具-a
:显示所有连接和监听端口-n
:以数字形式显示地址和端口号(不解析主机名和服务名)-o
:显示拥有每个连接的进程ID| findstr 50052
:通过管道将结果传递给findstr,筛选包含"50052"的行
这个命令的作用是查找所有使用50052端口的网络连接,并显示相关进程ID。在实际工作中,这非常有用,比如:
- 当你启动一个服务但发现端口被占用时
- 当你想确认某个服务是否正常监听指定端口时
- 当排查网络连接问题时
结果解读示例:
TCP 0.0.0.0:50052 0.0.0.0:0 LISTENING 1234
TCP 192.168.1.100:50052 203.0.113.45:443 ESTABLISHED 5678
- 第一行表示本地正在监听50052端口,进程ID是1234
- 第二行表示本地通过50052端口与203.0.113.45的443端口建立了连接,进程ID是5678
Linux中的对应工具:ss命令
在Linux系统中,传统的netstat
命令已被更强大的ss
(Socket Statistics)命令取代。实现相同功能的命令是:
ss -tulnp | grep 50052
参数解释:
-t
:显示TCP连接-u
:显示UDP连接-l
:显示监听状态的连接-n
:不解析服务名称-p
:显示进程信息| grep 50052
:筛选包含50052的行
进阶用法:查看特定协议的连接
# 只查看TCP连接
ss -tlnp | grep 50052
# 只查看UDP连接
ss -ulnp | grep 50052
实际工作案例分享
案例1:端口冲突排查
场景:在Windows服务器上启动一个Java应用,报错"Port 50052 already in use"。
解决步骤:
- 运行命令:
netstat -ano | findstr 50052
- 发现50052端口被进程ID为6789的进程占用
- 打开任务管理器,查看PID为6789的进程,发现是之前未正常关闭的同类应用
- 结束该进程后,成功启动新应用
案例2:Linux服务连接验证
场景:在Linux服务器部署了gRPC服务,配置监听50052端口,但客户端无法连接。
排查过程:
- 首先检查服务是否监听正确端口:
如果没有输出,说明服务未成功启动或配置错误ss -tlnp | grep 50052
- 检查防火墙设置:
sudo iptables -L -n | grep 50052
- 发现防火墙阻止了该端口,添加规则后问题解决
学习建议与进阶技巧
-
常用组合:
- Windows:
netstat -ano
(查看所有连接) - Linux:
ss -tulnp
(查看所有监听端口)
- Windows:
-
进程查找:
- Windows: 在任务管理器中查看PID对应的进程
- Linux:
ps -aux | grep <PID>
或lsof -i :50052
-
定时监控:
watch -n 1 "ss -tulnp | grep 50052"
每1秒刷新一次50052端口的连接状态
-
网络连接状态理解:
- LISTENING/ESTABLISHED/TIME_WAIT等状态的含义
-
安全应用:
- 定期检查异常连接,防范恶意软件
- 了解正常服务的端口使用情况,便于快速识别异常
https://github.com/0voice