摘要: 本文整理开发中常用的四种网络排查工具:用 ping 判断主机连通性,用 telnet 快速探测端口,用 nc 完成扫端口、传文件和临时通信,用 netstat 检查本机端口占用与连接状态。文末还提供常见场景速查表和踩坑提醒,方便遇到网络问题时按顺序快速定位。
1. ping ------ 先看路通不通
我最先用它。它就是我的"网络试金石",看目标主机在不在、往返要多久。
我常用的几种打法:
| 命令 | 什么时候用 | 我的示例 |
|---|---|---|
ping 目标 |
最简单的健康检查,看对方是否活着。 | ping google.com |
ping -c 4 目标 |
我只想看个大概结果,不想让它一直跑。 | ping -c 4 192.168.1.1 |
ping -i 0.5 目标 |
网络不太稳定时,我想看看快速发包的效果。 | ping -i 0.5 baidu.com |
ping -s 1024 目标 |
有时我想测测大包会不会被丢。 | ping -s 1024 8.8.8.8 |
重点看 time 值是否波动太大,以及有没有连续丢包。一旦 icmp_seq 不连续,我就知道链路可能有点问题了。
2. telnet ------ 快速摸一下端口
如果我怀疑是防火墙或服务没起来,我就用 telnet 简单探一下端口。虽然它不安全,但胜在几乎所有系统都有。
使用方式:
| 命令 | 什么时候用 | 我的示例 |
|---|---|---|
telnet 主机 端口 |
最直接的端口探测,能通就是好。 | telnet 192.168.1.10 80 |
| 连接成功后 | 偶尔我会手动发个 HTTP 请求试试应用层。 | 输入 GET / HTTP/1.1 再按两下回车 |
判断结果的法则:
- 连上 → 端口开着,往下查应用。
Connection refused→ 服务根本没起来,或者端口没监听。Connection timed out→ 八成是防火墙拦了,或者 IP/端口写错了。
现在很多新机器默认没装 telnet,真要用就
yum install telnet或apt install telnet先装上。
3. nc (netcat) ------ 功能最强的"瑞士军刀"
这玩意儿是工具箱里的"瑞士军刀"------能探测端口、传文件、甚至当简易服务器用。脚本里我最爱用它。
常用招数:
| 场景 | 我的命令 | 我这么用 |
|---|---|---|
| 快速扫端口 | nc -zv 192.168.1.10 22-80 |
-z 只扫不连,-v 给我看结果,扫一段端口特别快。 |
| 设置超时 | nc -w 2 -zv 10.0.0.1 443 |
网络慢的时候,别傻等着,2 秒没反应就放弃。 |
| 传文件(接收端) | nc -l -p 1234 > file.txt |
我这边先开着监听,等文件从另一边过来。 |
| 传文件(发送端) | nc 192.168.1.2 1234 < file.txt |
这是发送方,把文件内容送到接收端的 1234 端口。 |
| 临时聊天/调试 | 服务端:nc -l -p 5555 客户端:nc 192.168.1.2 5555 |
我偶尔用它做两个主机间的简单文本通信,比如调试时发个消息。 |
4. netstat ------ 查本机在干什么
前面三个都是往外看,netstat 是往内看------看机器上开了哪些端口、哪个进程占了端口、连接状态怎么样。这是我最常用来定位"端口被谁占了"的命令。
核心命令表:
| 命令 | 我什么时候用它 | 我的示例 |
|---|---|---|
netstat -tuln |
查看本机在监听哪些端口,我最常用的命令。 | netstat -tuln |
netstat -antp |
排查端口占用,这个命令带进程信息,定位问题首选。 | netstat -antp |
netstat -an |
看所有连接的状态,包括建立的、等待的。 | netstat -an |
netstat -i |
网卡是不是在丢包,用它看一眼统计。 | netstat -i |
netstat -r |
我想知道数据包往哪个网关走了。 | netstat -r |
netstat -c -antp |
持续监控连接变化,像 top 一样实时刷新。 |
netstat -c -antp |
看输出的小窍门:
Local Address是0.0.0.0:80→ 表示所有 IP 的 80 端口都在监听。State是LISTEN→ 正在等待连接;ESTABLISHED→ 连接已建立;TIME_WAIT→ 正在关闭。- 用
-p参数能看到进程 PID,找麻烦的进程就靠它。
实际案例: 有次我启动服务报 8080端口被占用,直接 netstat -antp | grep 8080,立刻找到是哪个进程,kill 掉就解决了。
场景速查表
遇到网络问题,按这个顺序来:
| 我的需求 | 我用的工具 | 我敲的命令 |
|---|---|---|
| 看看对方主机在不在 | ping |
ping -c 4 8.8.8.8 |
| 随便探探某个端口通不通 | telnet |
telnet 192.168.1.1 3306 |
| 快速扫一下端口范围 | nc |
nc -zv 192.168.1.1 80-90 |
| 临时传个文件给同事 | nc |
我开监听,他发数据 |
| 看本机开了哪些端口 | netstat |
netstat -tuln |
| 查谁占了我想要的端口 | netstat |
`netstat -antp |
踩过的坑
- 安全提醒: 用
telnet和nc传敏感信息?别,都是明文。 - 权限问题: 监听 1024 以下的端口,比如 80、443,必须用
sudo。netstat -p也得加sudo才能看到进程名。 - Windows 上怎么办: Windows 有
ping,telnet得去"启用或关闭 Windows 功能"里开,nc就装个 Nmap 吧。netstat -ano在 Windows 上也能用,就是少了-p的参数。 - 排查顺序: 我的习惯是
ping→telnet/nc→netstat→ 再看应用日志,基本能解决 90% 的问题。