Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 

Repository files navigation

GhostWall · 鬼打墙

侦测终端里的「幽灵纸条」——端口还在纸上,房间已经空了。

一句话解释

你电脑里有些程序(比如 Clash)关闭后,会在环境变量里留下一张「纸条」指向一个已经不存在的端口。其他程序拿着纸条去找,发现没人,就报错。GhostWall 帮你一眼找出这些过期纸条。


前置条件

  • macOS(Linux 也支持,但标签可能显示为 bash
  • Python 3(macOS 自带)
  • 零第三方依赖,不装任何东西

安装

# 1. 进目录
cd GhostWall

# 2. 加可执行权限(首次)
chmod +x ghostwall

设为全局命令(可选)

在系统 Terminal 里执行一次,以后就能在任何地方敲 ghostwall 启动:

echo "alias ghostwall='python3 /完整路径/GhostWall/ghostwall'" >> ~/.zshrc && source ~/.zshrc

/完整路径/GhostWall/ghostwall 换成你放这个文件的实际路径。


启动

./ghostwall
# 或者设了 alias 之后直接
ghostwall

操作指南

你想做的事 怎么做
上下翻看 键盘 或鼠标滚轮
翻页 PageUp / PageDown
看某一行的详细信息 Enter 或鼠标点击那一行
关闭详情弹窗 Enter 或 点空白处
重新扫描(比如刚改了环境变量) R
退出 Q

界面解读

┌─ GhostWall · 鬼打墙 ──── [R]刷新 [↑↓]浏览 [Enter]详情 [Q]退出 ─┐
│                                                                   │
│  Shell        PID     变量           端口      状态                │
│  ──────────────────────────────────────────────────────           │
│▸ iTerm        42341   HTTP_PROXY     7890     🟢 活着             │
│  Obsidian     43102   HTTP_PROXY     55632    🔴 已死  ← 红底     │
│  VS Code      44001   (无纸条)       -        ⚪ 无端口            │
│                                                                   │
│  1 个鬼打墙                               共 3 条记录              │
│  红色行 = 鬼打墙 · 纸条指向空房间 · unset 即可破除                  │
└───────────────────────────────────────────────────────────────────┘
看到这个 意思 需要管吗
🟢 活着 / 绿底行 端口有人,纸条有效 不用管
🔴 已死 / 红底行 鬼打墙! 纸条指向空房间 ⚠️ 需要处理
⚪ 无端口 这个 Shell 没有纸条 不用管

发现有红底行,怎么修

点那一行按 Enter,弹窗会显示精确的修复命令,比如:

unset HTTP_PROXY

复制那条命令,在对应的 Terminal 窗口里粘贴执行就行。

如果你懒得一个个修,想一键清空所有纸条:

unset HTTP_PROXY HTTPS_PROXY ALL_PROXY http_proxy https_proxy all_proxy

⚠️ 注意:这会清空你当前 Terminal 窗口的所有纸条(包括有效的)。如果你正依赖某个端口做转发,清完后需要重新 export 设置。


原理(想了解再看)

GhostWall 做了三件事:

  1. 找终端进程 — 用 ps 找到所有运行中 zsh/bash 的 PID
  2. 读纸条 — 用 ps eww -p <PID> 读取每个进程的环境变量,找出带 proxy 字样的(即「纸条」)
  3. 敲门 — 从纸条里抠出端口号,用 lsof -i :<端口> 看端口背后有没有程序在听

三步全用系统自带命令,不装任何东西,不联网。


常见问题

Q: 打开后一片空白?
A: 当前没有运行任何 zsh/bash 终端。打开一个 Terminal 窗口再试。

Q: 红底行太多,哪个是我的问题?
A: 找你当前在用的那个标签(比如 iTermObsidian),看它下面的红底行。别的 Shell 的纸条跟你无关。

Q: 端口是什么,完全不懂?
A: 不需要懂。就当它是快递柜的格子编号。有人 = 程序还在。没人 = 鬼打墙。


背景故事

作者在两天内先后撞上了 GrokBuild CLI 和 CodeWhale API 的网络连接故障。排查到底,发现都是同一个原因:之前设置的端口已经关了,但环境变量里指向那个端口的「纸条」还留着。程序拿着纸条去敲门,没人应,报错。

于是我写了一个工具,让它替我去敲门。

About

GhostWall · 鬼打墙 — 侦测终端里的幽灵端口。零依赖 Python TUI 工具,一键找出环境变量中指向已死端口的代理配置。

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages