推荐开源项目: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 扫一遍,比自己挨个 telnetnslookup 省事得多。

3. 网络入门学习者

如果你刚接触网络知识,正在学 TCP/IP、DNS、路由这些概念,Network Doctor 是一个不错的辅助工具。它可以直观地展示每一步检查的执行过程和结果,比看书上的理论图更容易理解。

4. 家里有 NAS 或自建服务器的人

家宽网络环境比机房复杂多了——NAT 穿透、动态 IP、UPnP、光猫防火墙……出问题的时候,跑一下这个工具,它会帮你做一次摸底排查,比自己在路由器后台瞎点靠谱。

不适合谁?

如果你是网络协议栈层面的专家,对每一层的排查手段都烂熟于心,那这个工具对你来说可能太基础了。它的价值在于给”不知道从哪里查起”的人提供一个标准化的流程。


实用性怎么样?

我拿自己实际遇到过的问题试了一下,说说感受。

前几天我有个服务突然访问不了,症状是偶尔通偶尔不通,很诡异。用 Network Doctor 跑了一遍诊断,结果报告里显示丢包率 3.5%,路径上某一跳的延迟波动很大——顺着这个线索去查,发现是某台交换机的光模块有问题。

如果没有这个工具,我可能还在傻傻地 ping -t 看半天。

几个我觉得实用的点:

  • 流程全面但不啰嗦:从本地网卡状态到网关连通性到外网可达性到 DNS 解析到路由追踪到端口检测到带宽摸底,一条龙跑完。
  • 结果清晰:每项检查都有明确的 pass/fail 标注,一眼就能看出问题在哪。
  • 可复现:同一条命令,不管谁来跑,结果格式都一样,方便交接和存档。
  • 报告导出:诊断完可以导出报告,贴到工单或者群里,比截一堆黑窗口的图专业多了。

当然也有不足——和所有自动化诊断工具一样,它只能覆盖通用的、可预判的场景。某些奇怪的、需要结合业务逻辑才能定位的问题(比如 MTU 分片、TCP 窗口协商),靠这种通用工具是查不出来的。


隐私方面

这一点也值得说清楚。

Network Doctor 的诊断逻辑是完全本地运行的——它调用的是你机器上的 pingtraceroutenslookupcurl 等系统命令,不会把任何数据发到第三方服务器。

报告也是默认保存在本地。不会上传,不需要注册账号,没有 telemetry 后台上报。

这和那些在线”网站测速”、”端口检测”工具比起来,隐私性好太多了——那些在线工具理论上知道你的 IP 在测什么目标、什么时间在测。

如果非要说隐私风险,唯一的潜在问题是:诊断报告里会包含你的网络拓扑信息(比如内网网关 IP、路由路径上的节点 IP、DNS 服务器地址)。如果你要把报告发出去(比如发到工单或者群里),注意脱敏。不过这些信息本身也不是什么机密,日常用 traceroute 也会暴露同样的数据。


部署和使用教程

安装

项目是 Python 写的,安装非常简单:

1
2
3
4
5
git clone https://github.com/heymaikol/network-doctor.git
cd network-doctor
python -m venv venv
source venv/bin/activate
pip install -r requirements.txt

基本使用

最简单的用法——直接跑一次完整诊断:

1
python doctor.py

工具会自动检测你的操作系统和可用的网络命令,然后按顺序执行:本地网络检查、网关连通性、外网可达性、DNS 解析测试、路由追踪、端口可达性、最终汇总报告。

整个过程不需要任何额外参数。

进阶用法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 指定诊断目标
python doctor.py --target 192.168.1.1

# 只执行特定检查项
python doctor.py --checks ping,dns,traceroute

# 自定义 DNS 服务器
python doctor.py --dns 8.8.8.8

# 指定测试端口
python doctor.py --port 80,443,22

# 输出报告到文件
python doctor.py --output report.txt

支持的检查项

检查项 说明
本地网络 获取本机 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 帮你在所有常见排查点上快速过一遍,不管是自己看结果,还是拿报告找老司机帮忙,都清楚很多。

当然,工具只是工具。它不会让你一夜之间变成网络专家,但它可以让你在变成专家之前,先别踩那么多坑。


项目地址:https://github.com/heymaikol/network-doctor