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脚本, 应用安全, 网络工具, 运维工具