0xShyCell/ipa
GitHub: 0xShyCell/ipa
一个轻量级的 bash 命令行工具,将系统 IP 地址信息整理为分类、可过滤的整洁表格,方便快速查看 LAN 和 VPN 接口地址。
Stars: 0 | Forks: 0
# ipa — 网络 IP 地址格式化工具
一个简短的 bash 工具,它用一张整洁、分类且自适应的接口和 IP 表格取代了 `ip a` / `ifconfig` / `ip -4 addr show`。专为在实验室和 CTF 工作期间快速检查“我现在的 VPN IP / LAN IP 是什么”而构建。
```
$ ipa
┌──────┬─────────────────┬─────────────────┐
│ Type │ Interface │ IPv4 Address │
├──────┼─────────────────┼─────────────────┤
│ LAN │ eth0 │ 10.10.236.240 │
│ LAN │ br-44d3053b2e30 │ 172.18.0.1 │
│ LAN │ docker0 │ 172.17.0.1 │
│ VPN │ tun0 │ 192.168.161.234 │
└──────┴─────────────────┴─────────────────┘
```
## 为什么需要
`ip a` 和 `ifconfig` 会输出每个接口的完整标志、MTU、MAC 地址和作用域信息,所有这些格式都是为了完整性,而不是为了快速浏览。
在一台运行着 Docker bridges、VPN tunnel 以及几个物理/虚拟 NIC 的机器上,要找到“哪一行是我的 `tun0` IP”意味着你需要略过大量当时并不需要的干扰信息——这在 OSCP/HTB/CTF 的工作流中经常出现,因为你需要随时准备好将 VPN IP 提供给 payload 或 listener。
`ipa` 做了三件 `ip a` 没有做的事:
- **分类** 每个接口为 `LAN`、`VPN` 或 `Other`(VPN 检测基于接口名称——请参阅[它如何对接口进行分类](#how-it-classifies-interfaces))
- **过滤** 在同一个命令中完成,否则你必须将其管道传递给 `grep`/`awk` ——例如 `ipa vpn`、`ipa tun0`、`ipa 4 lan`
- **渲染为表格**,它会根据实际内容自动调整大小,而不是固定宽度,无论你是打印一个接口还是所有接口,它都能保持清晰易读
当你需要完整的接口细节(MTU、flags、MAC、scope)时,它并不能替代 `ip a`——它只是在交互期间为你提供实际需要的那一两个数字的更快捷径。
## 安装说明
### Linux
```
curl -o ipa https://raw.githubusercontent.com/0xShyCell/ipa/main/ipa
chmod +x ipa
sudo mv ipa /usr/local/bin/ipa
```
`ip` (iproute2) 几乎在所有现代发行版中都默认提供——无需额外步骤。
### macOS
macOS 没有原生的 `ip` 命令,因此请先安装 `iproute2mac`:
```
brew install iproute2mac
curl -o ipa https://raw.githubusercontent.com/0xShyCell/ipa/main/ipa
chmod +x ipa
sudo mv ipa /usr/local/bin/ipa
```
`iproute2mac` 会将 `ip` 的输出别名为符合 iproute2 兼容语法的 `ifconfig`/`netstat` 输出,而这正是 `ipa` 实际解析的内容——如果没有它,`ipa` 会运行,但不会报告任何接口。
无论哪种方式,一旦安装完毕,你也可以直接克隆代码库,并将 `ipa` 文件符号链接或复制到你 `PATH` 中的任何目录。
## 用法
```
ipa – Network IP Address Formatter
USAGE
ipa [version] [filter]
VERSION (optional, default: 4)
4 IPv4 addresses only
6 IPv6 addresses only
both IPv4 and IPv6
FILTER (optional, default: all)
all All interfaces
vpn VPN interfaces only (tun, tap, wg, ppp, …)
lan LAN interfaces only
Specific interface by name (e.g. eth0, en0, tun0)
EXAMPLES
ipa IPv4, all interfaces
ipa 6 IPv6, all interfaces
ipa both IPv4 + IPv6, all interfaces
ipa 4 vpn IPv4, VPN interfaces only
ipa 4 lan IPv4, LAN interfaces only
ipa both eth0 IPv4 + IPv6, eth0 only
ipa tun0 Shorthand: IPv4, tun0 only
FLAGS
-h, --help Show this help message
```
这是实际的 `-h` 输出——不是改写。
## 实际示例
从活动的会话中捕获,VPN IP 已被隐去:
```
$ ipa vpn
┌──────┬───────────┬─────────────────┐
│ Type │ Interface │ IPv4 Address │
├──────┼───────────┼─────────────────┤
│ VPN │ tun0 │ 192.168.161.234 │
└──────┴───────────┴─────────────────┘
```
`ipa tun0`、`ipa vpn` 和 `ipa 4 vpn` 在这里都会解析为同一行——选哪个输入得快就用哪个。涵盖所有模式的更多实际捕获示例可以在[`examples/`](examples/)中找到。
## 它如何对接口进行分类
- **VPN**:接口名称匹配 `tun|tap|vpn|wg|ppp|ipsec|vti|gre|gretap|erspan`(针对 `ip` 报告的接口名称进行区分大小写的子字符串匹配)
- **LAN** (IPv4):地址位于 `10.0.0.0/8`、`192.168.0.0/16` 或 `172.16.0.0/12` 范围内
- **LAN** (IPv6):地址以 `fc` 或 `fd` 开头(ULA 范围,`fc00::/7`)
- **Other**:其他所有情况——公共 IP、非标准私有范围等。
- Loopback(`127.0.0.1`、`::1`)和链路本地 IPv6(`fe80::`)始终被排除在外
VPN 检测是基于名称的,而不是基于路由表或 `wg show` / `openvpn` 进程检查——如果你碰巧将物理 NIC 命名为 `tun-lab`,它会被标记为 VPN,而使用不匹配接口名称的 VPN 客户端则不会被标记。这是一个已知的权衡,而不是一个 bug;如果你想改进它,请参阅 `CONTRIBUTING.md`。
## 依赖项
- `bash`(使用 `[[ ]]`、正则表达式匹配、数组——无法在 `sh`/`dash` 下运行)
- `ip` 命令(来自 iproute2)——在 Linux 上原生提供,在 macOS 上需要安装[`iproute2mac`](https://github.com/brona/iproute2mac)(请参阅[安装说明](#installation))
- `tput`——可选,用于彩色输出。如果缺少或输出不是 TTY,颜色将被静默跳过,表格仍会正常渲染
## 已确认在以下平台正常运行
- Kali Linux(aarch64,VMware Fusion,Apple Silicon 主机)
- macOS(Apple Silicon,已安装 `iproute2mac`)
未在其他发行版或 Windows/WSL 上进行测试——在具有 `bash` + `ip`(或 `iproute2mac`)的任何地方都应该能正常工作,但这只是未测试,并未得到确认。
## 已知限制
- VPN 检测仅基于接口名称模式匹配(见上文)
- 暂无 JSON/机器可读输出模式——仅支持表格
- 对于仅报告无法识别前缀下的全局/ULA 地址的接口,没有 IPv6 LAN 检测功能——这些将归入 `Other`
## 许可证
MIT——请参阅 [LICENSE](LICENSE)。
标签:certspotter, Shell脚本, 应用安全, 网络工具, 运维工具