流程化网络排障工具
推荐开源项目:Network Doctor —— 遇到网络问题别再瞎 ping 了
干过运维或者经常处理网络问题的人应该都有这种经历:
用户说”上不了网”,你第一反应是 ping 114.114.114.114。通的。再 ping baidu.com,也通。然后你就不知道下一步该检查什么了。或者反过来——大包小包敲了一堆命令,输出看了一屏幕,但就是定位不到问题在哪。
我以前也这样。直到后来同事给我看了 heymaikol/network-doctor 这个项目,才发现原来网络排障是可以流程化、自动化的。
Network Doctor 是什么?
Network Doctor 是一个基于 Python 的命令行网络诊断工具。它把网络排障的常用步骤串成了一条自动化流水线——从基础的连通性检查,到 DNS 解析、路由追踪、端口检测、带宽摸底,最后生成一份结构化的诊断报告。
你要做的就是运行一条命令,等着看结果。
和传统的网络工具相比,它解决了一个很实际的问题:当你不知道该查什么的时候,它能告诉你下一步该干什么。
适合什么人群?
1. 运维工程师 / SRE
日常值班处理网络工单的时候,能少敲几条命令是一回事,关键是不要漏掉排查步骤。Network Doctor 把完整的排查链路跑一遍,不会因为你经验不足或者一时紧张就漏检某个环节。
2. 后端开发
很多时候你写的服务”跑不通”,不一定是代码的问题,可能是网络层面有异常。端口没开、DNS 解析错了、路由不对——这些场景下,拿 Network Doctor 扫一遍,比自己挨个 telnet、nslookup 省事得多。
3. 网络入门学习者
如果你刚接触网络知识,正在学 TCP/IP、DNS、路由这些概念,Network Doctor 是一个不错的辅助工具。它可以直观地展示每一步检查的执行过程和结果,比看书上的理论图更容易理解。
4. 家里有 NAS 或自建服务器的人
家宽网络环境比机房复杂多了——NAT 穿透、动态 IP、UPnP、光猫防火墙……出问题的时候,跑一下这个工具,它会帮你做一次摸底排查,比自己在路由器后台瞎点靠谱。
不适合谁?
如果你是网络协议栈层面的专家,对每一层的排查手段都烂熟于心,那这个工具对你来说可能太基础了。它的价值在于给”不知道从哪里查起”的人提供一个标准化的流程。
实用性怎么样?
我拿自己实际遇到过的问题试了一下,说说感受。
前几天我有个服务突然访问不了,症状是偶尔通偶尔不通,很诡异。用 Network Doctor 跑了一遍诊断,结果报告里显示丢包率 3.5%,路径上某一跳的延迟波动很大——顺着这个线索去查,发现是某台交换机的光模块有问题。
如果没有这个工具,我可能还在傻傻地 ping -t 看半天。
几个我觉得实用的点:
- 流程全面但不啰嗦:从本地网卡状态到网关连通性到外网可达性到 DNS 解析到路由追踪到端口检测到带宽摸底,一条龙跑完。
- 结果清晰:每项检查都有明确的 pass/fail 标注,一眼就能看出问题在哪。
- 可复现:同一条命令,不管谁来跑,结果格式都一样,方便交接和存档。
- 报告导出:诊断完可以导出报告,贴到工单或者群里,比截一堆黑窗口的图专业多了。
当然也有不足——和所有自动化诊断工具一样,它只能覆盖通用的、可预判的场景。某些奇怪的、需要结合业务逻辑才能定位的问题(比如 MTU 分片、TCP 窗口协商),靠这种通用工具是查不出来的。
隐私方面
这一点也值得说清楚。
Network Doctor 的诊断逻辑是完全本地运行的——它调用的是你机器上的 ping、traceroute、nslookup、curl 等系统命令,不会把任何数据发到第三方服务器。
报告也是默认保存在本地。不会上传,不需要注册账号,没有 telemetry 后台上报。
这和那些在线”网站测速”、”端口检测”工具比起来,隐私性好太多了——那些在线工具理论上知道你的 IP 在测什么目标、什么时间在测。
如果非要说隐私风险,唯一的潜在问题是:诊断报告里会包含你的网络拓扑信息(比如内网网关 IP、路由路径上的节点 IP、DNS 服务器地址)。如果你要把报告发出去(比如发到工单或者群里),注意脱敏。不过这些信息本身也不是什么机密,日常用 traceroute 也会暴露同样的数据。
部署和使用教程
安装
项目是 Python 写的,安装非常简单:
1 | git clone https://github.com/heymaikol/network-doctor.git |
基本使用
最简单的用法——直接跑一次完整诊断:
1 | python doctor.py |
工具会自动检测你的操作系统和可用的网络命令,然后按顺序执行:本地网络检查、网关连通性、外网可达性、DNS 解析测试、路由追踪、端口可达性、最终汇总报告。
整个过程不需要任何额外参数。
进阶用法
1 | # 指定诊断目标 |
支持的检查项
| 检查项 | 说明 |
|---|---|
| 本地网络 | 获取本机 IP、网卡状态、默认网关 |
| 网关连通性 | ping 网关 IP |
| 外网可达性 | ping 公网 IP |
| DNS 解析 | 解析常用域名 |
| 路由追踪 | traceroute 到目标 IP,检查每一跳延迟 |
| 端口检测 | 检测目标 IP 的指定端口是否开放 |
| HTTP 检测 | curl 检测 Web 服务是否正常响应 |
| 带宽摸底 | 粗略测速 |
同类项目对比
| 工具 | 特点 |
|---|---|
| Network Doctor | 流程化、一键诊断、报告输出、适合通用排障 |
| mtr | 结合 ping + traceroute,轻量但功能单一 |
| nmap | 端口扫描王者,但不做连通性诊断 |
| iperf | 专业带宽测试,不涉及其他检查项 |
Network Doctor 的定位是”快速诊断工具”,和 mtr 这类单一工具不冲突——你完全可以先用 Network Doctor 全扫一遍找到方向,再用 mtr 或者 nmap 深挖具体问题。
最后说几句
网络排障这件事,说到底就是个排除法。有经验的人能快速猜到问题可能出在哪一层,没经验的人就可能一直在错误的方向上浪费时间。Network Doctor 帮你在所有常见排查点上快速过一遍,不管是自己看结果,还是拿报告找老司机帮忙,都清楚很多。
当然,工具只是工具。它不会让你一夜之间变成网络专家,但它可以让你在变成专家之前,先别踩那么多坑。
