
— 特色专栏 —
大家好,我是民工哥!
对于程序员来讲,诊断和解决网络问题也是我们日常工作中必备技能之一。

因此,Netstat 这个命令行工具也成了我们日常必不可少的工具之一。
Netstat(network statistics) 是一个命令行工具,它用来显示网络连接(传入和传出),路由表和许多网络接口(网络接口控制器或软件定义的网络接口)和网络协议统计信息。也可用于查找网络中的问题,打印 Linux 中网络系统的状态信息,查看整个 Linux 系统的网络情况。
Netstat 的使用平很广,包括 OS X、Linux、Solaris 和 BSD,以及基于 Windows NT 的操作系统,包括 Windows XP、Windows Vista、Windows 7/8/10。
今天,给大家推荐一款比 Netsta 更强大、更牛逼的命令行工具!

dish 是一款专为套接字(Socket)连接状态监控设计的轻量级命令行工具。能够快速执行检查任务,提高监控效率。
还可通过cron任务驱动,定期运行dish进行一次性检查,无需长时间运行的代理程序,适合自动化监控任务。
其核心能力包括以下几点:
实时监控 TCP/UDP 套接字的以下状态:
TIME_WAIT、CLOSE_WAIT 等半开/半闭状态的连接。支持 IPv4/IPv6 和 TCP/UDP 协议,兼容常见服务(如 Web 服务、数据库连接)。
dish 作为轻量级命令行监控工具,其监控原理主要围绕套接字(Socket)连接的状态检测展开,通过模拟客户端行为、解析网络响应等方式,实时判断连接是否成功建立、异常断开或处于僵死状态。
模拟客户端行为:dish通过模拟客户端与目标服务器的连接过程,检测套接字连接的状态。它可能模拟TCP三次握手或UDP数据包交互,以判断目标端口是否可访问。
解析网络响应:在模拟连接过程中,dish会解析目标服务器返回的网络响应,包括连接是否成功建立、是否被拒绝(Connection Refused)、是否超时(Timeout)或是否被重置(RST)。这些响应信息是判断连接状态的关键依据。
状态机驱动:dish可能基于TCP/UDP协议的状态机模型,对套接字连接的状态进行跟踪和判断。例如,它会识别SYN_SENT、FIN_WAIT、TIME_WAIT等状态,以判断连接是否处于正常、异常或僵死状态。
超时与重试机制:为了确保监控的准确性,dish可能设置了超时时间和重试次数。当连接尝试在超时时间内未得到响应时,dish会判定连接失败,并可能进行重试以确认状态。
轻量化与低开销:dish作为轻量级工具,其监控过程对系统资源的占用极低。它可能通过优化网络请求、减少不必要的日志记录等方式,实现高效且低开销的监控。
服务可用性监控:替代 telnet 或 nc,批量检测多台服务器的端口连通性。
故障排查:快速定位网络中断、服务崩溃或防火墙规则异常。
自动化运维:集成到 CI/CD 流程中,作为服务启动后的健康检查工具。
可以通过 go install 或 Homebrew 安装,命令如下:
go install go.vxn.dev/dish/cmd/dish@latest
brew install dish
待检查的Socket列表可以通过本地JSON文件或远程JSON API端点提供。例如:
使用本地JSON文件检查的命令为
dish /opt/dish/sockets.json
使用远程JSON API检查的命令为
dish http://restapi.example.com/dish/sockets/:instance
可进行Telegram通知配置,命令示例为
dish -telegramChatID "-123456789" -telegramBotToken "123:AAAbcD_ef" sockets.json;
也可进行Pushgateway更新配置,命令示例为
dish -target https://pushgw.example.com/ https://api.example.com/dish/sockets。
dish [FLAGS] SOURCE
FLAGS
dish -h
Usage of dish:
-cache
a bool, specifies whether to cache the socket list fetched from the remote API source
-cacheDir string
a string, specifies the directory used to cache the socket list fetched from the remote API source (default ".cache")
-cacheTTL uint
an int, time duration (in minutes) forwhich the cached list of sockets is valid (default 10)
-hname string
a string, name of a custom additional header to be used when fetching and pushing results to the remote API (used mainly for auth purposes)
-hvalue string
a string, value of the custom additional header to be used when fetching and pushing results to the remote API (used mainly for auth purposes)
-machineNotifySuccess
a bool, specifies whether successful checks with no failures should be reported to machine channels
-name string
a string, dish instance name (default "generic-dish")
-target string
a string, result update path/URL to pushgateway, plaintext/byte output
-telegramBotToken string
a string, Telegram bot private token
-telegramChatID string
a string, Telegram chat/channel ID
-textNotifySuccess
a bool, specifies whether successful checks with no failures should be reported to text channels
-timeout uint
an int, timeout in seconds for http and tcp calls (default 10)
-updateURL string
a string, API endpoint URL for pushing results
-verbose
a bool, console stdout logging toggle
-webhookURL string
a string, URL of webhook endpoint
# 检查 80 端口是否可访问(TCP)
dish --host example.com --port 80 --protocol tcp
###输出信息
Connected to example.com:80 (TCP) - Status: SUCCESS
# 检查 DNS 查询(UDP)
dish --host 8.8.8.8 --port 53 --protocol udp --timeout 2
##输出信息
Sent UDP packet to 8.8.8.8:53 - Status: TIMEOUT (No response)
# 批量检测多个端口(通过脚本循环)
for port in 80 443 3306; do
dish --host api.example.com --port $port && echo "Port $port: OK" || echo "Port $port: FAIL"
done
工具 | 核心优势 | 适用场景 | 劣势 |
|---|---|---|---|
dish | 轻量、专注套接字状态 | 快速排查连接问题 | 无图形界面 |
netcat | 支持数据交互 | 简单测试或端口扫描 | 功能单一,无状态统计 |
nmap | 全面网络扫描(端口、服务、漏洞) | 深度安全审计 | 资源占用高 |
telnet | 交互式连接测试 | 手动调试 | 已过时,不安全 |
dish 是一款专为套接字连接状态诊断设计的轻量级工具,适合快速定位网络问题。其优势在于低开销、高精度和易用性,但需注意其功能边界(如不处理应用层协议)。对于需要深度监控的场景,建议搭配专业工具(如 Prometheus)使用。
Github: https://github.com/thevxn/dish
👍 如果你喜欢这篇文章,请点赞并分享给你的朋友!