用 Rust 编写的跨操作系统端口查找工具——一个命令行界面,三种截然不同的数据格式

发布日期:2026-04-19 09:20:58   浏览量 :1
发布日期:2026-04-19 09:20:58  
1

2026西湖龙井茶官网DTC发售:茶农直供,政府溯源防伪到农户家 

Rust 编写的跨操作系统端口查找器 —— 一个命令行工具,三种截然不同的数据格式

一个小型的 Rust 命令行工具,在 macOS、Linux 和 Windows 上使用相同的标志和相同的输出结构来回答“谁占用了 3000 端口?”这个问题——并且可以选择终止该进程。二进制文件仅 488 KB,包含 42 个测试,除了 clapserde 之外没有依赖任何外部 crate。

当运行 npm run dev 时,程序因 EADDRINUSE: address already in use :::3000 错误而崩溃,再次出现一个僵尸 Node 进程占用端口的情况。在 macOS 上,常用的命令是 lsof -nP -iTCP:3000 -sTCP:LISTEN。在 Linux 上,使用的是 ss -Hlntp "( sport = :3000 )"——除非是 Alpine Linux,这种情况下 ss 可能不支持 -p 参数。在 Windows 上,则需要先运行 netstat -ano | findstr :3000,接着运行 tasklist /FI "PID eq ..." 以获取进程名称。

三个操作系统,三种完全不同的命令,三种不同的输出结构。如果你发布的软件需要在这三个系统上运行——这里的“发布”还包括“通过 SSH 连接到客户机器进行调试”——你最终不得不每隔几周就重新学习其中一种命令。

我想要一个单一的工具:

  • 在每个操作系统上使用相同的命令。 port-finder 3000 可在 macOS、Linux 和 Windows 上运行。
  • 相同的输出结构。 固定的五列:端口 / 进程ID / 命令 / 用户 / 地址
  • 不隐瞒双栈情况。 如果一个进程同时绑定了 0.0.0.0:3000[::]:3000,这是两个套接字,而不是一个——显示两行记录。
  • 一键终止。 使用 --kill(发送 SIGTERM 信号)或 --force(发送 SIGKILL 信号),无需再输入第二个命令。
  • 为脚本提供 --json 输出。 我构建的任何工具都具备监控/自动化路径。
  • 可通过 cargo install 安装的静态二进制文件。 无 C 语言依赖,无 OpenSSL 依赖。

编写这个工具的过程比我预期的更有趣。每个操作系统暴露“谁正在监听此套接字”信息的方式确实截然不同——不仅仅是标志不同,而是数据格式不同。port-finder 内部的三个解析器几乎没有任何共同之处。

GitHub:https://github.com/sen-ltd/port-finder

截图

表面用法

# 单个端口
$ port-finder 3000

# 多个端口
$ port-finder 3000 8080 5432

# 范围
$ port-finder 3000-3100

# 显示所有内容
$ port-finder

# 显示后终止进程
$ port-finder 3000 --kill          # SIGTERM 信号
$ port-finder 3000 --force         # SIGKILL 信号

# 用于管道处理
$ port-finder --json 8080 | jq '.listeners[] | {pid, command}'

免责声明:本文内容来自互联网,该文观点不代表本站观点。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请到页面底部单击反馈,一经查实,本站将立刻删除。

关于我们
热门推荐
合作伙伴
免责声明:本站部分资讯来源于网络,如有侵权请及时联系客服,我们将尽快处理
支持 反馈 订阅 数据
回到顶部