# IPtools 网络工具箱：Android 开源网络诊断工具，集成 Ping/端口扫描/路由追踪等 13 项功能

> IPtools（网络工具箱）是一个开源的 Android 网络诊断应用，集成了 IP 查询、Ping、路由追踪、端口扫描、局域网扫描、DNS 查询、Whois、SSH、测速、子网计算等十余种网络工具，采用 Kotlin + MVVM + Hilt 架构

- Canonical: https://www.zeroxin.xin/2026/06/18/IPtools-%E7%BD%91%E7%BB%9C%E5%B7%A5%E5%85%B7%E7%AE%B1/
- Published: 2026-06-18T10:00:00+08:00
- Updated: 2026-06-18T10:32:03+08:00
- Categories: 开源项目
- Tags: 开源项目, Android, 网络工具, Kotlin, MVVM

在日常开发和运维工作中，网络诊断工具几乎是每个人的必备品。但手机上能用的网络工具类 App 往往功能单一——有的只能 Ping，有的只能查 IP，很难找到一个能覆盖大部分网络诊断场景的集成工具。

**IPtools（网络工具箱）** 正是为解决这个痛点而生的开源 Android 应用。

项目地址：[https://github.com/xin-521/IPtools](https://github.com/xin-521/IPtools)

![IPtools 应用截图](/img/IPtools.png)

## 一、项目概览

IPtools 是一个**纯 Kotlin** 开发的 Android 网络工具集合应用，代码包名为 org.zeroxin.iptools，应用名称为"网络工具箱"。它把开发者/运维人员日常使用频率最高的网络诊断功能整合到一个 App 中，覆盖从基础连通性测试到高级端口扫描的完整链路。

当前版本 **v1.1**，目标 SDK 34（Android 14），最低支持 Android 7.0（API 24）。

### 为什么值得关注？

如果你是 Android 开发者，这个项目的代码质量、架构选型和技术栈都是一份很好的 MVVM + Hilt + Room + DataStore 参考实现。如果你只是用户，它可以替代手机上多个单一功能的网络工具。

## 二、完整功能清单

IPtools 内置了 **13 项网络工具**，分为基础工具和高级工具两大类。

### 基础网络工具（日常诊断）

| 工具 | 功能说明 |
| --- | --- |
| **我的 IP** | 查看本机公网 IP、归属地、ISP、ASN、经纬度，支持在地图上定位 |
| **局域网信息** | 显示当前 WiFi 连接详情：SSID、BSSID、信号强度、频率、网关、子网掩码、DNS 服务器、DHCP 信息 |
| **Ping 工具** | 测试网络连通性与延迟，支持自定义包数量、超时时间和包大小，提供连续 Ping 模式 |
| **路由追踪** | Traceroute，显示每一跳的 IP 和 RTT（三次探测），支持最大 30 跳 |

### 高级网络工具（深度诊断）

| 工具 | 功能说明 |
| --- | --- |
| **端口扫描** | TCP Connect 扫描，三种模式：快速扫描（23 个常用端口）、自定义端口范围、全端口扫描（1-65535，100 端口并行分批） |
| **局域网扫描** | 扫描局域网内 1-254 所有设备，检测 IP、MAC 地址、主机名、厂商信息（支持 Apple、小米、华为、Raspberry Pi、Espressif 等主流 OUI 识别） |
| **DNS 查询** | 支持 A/AAAA/MX/NS/TXT/CNAME 多种记录类型查询 |
| **DNS 基准测试** | 对比测试多个 DNS 服务器的解析速度 |
| **Whois 查询** | 查询域名注册信息：注册商、创建/到期日期、域名服务器等 |
| **SSH 工具** | 内置 SSH 客户端（基于 JSch 库），可直接连接远程服务器 |
| **网络测速** | 测试网络下载和上传速度 |
| **子网计算器** | 输入 IP/掩码，自动计算网络地址、广播地址、可用主机范围 |
| **MAC OUI 查询** | 根据 MAC 地址前缀查询设备厂商 |
| **Wake-on-LAN** | 远程唤醒局域网设备 |

### 辅助功能

- **IP 地图**：在 Leaflet WebView 地图上可视化显示 IP 位置
- **设置面板**：自定义 Ping 参数、扫描并发数、测速 URL、主题模式（亮色/暗色）
- **历史记录和收藏**：使用 Room 数据库保存查询历史和收藏，方便重复使用

## 三、技术栈与架构分析

从 Android 开发角度看，IPtools 的技术选型是现代 Android 开发的典型范本。

### 整体架构：MVVM

```
View (Fragment) → ViewModel → Repository → DataSource (Room/OkHttp/DataStore)
```

- **View 层**：基于 Android View System（XML 布局 + ViewBinding），使用 BottomNavigationView 构建底部导航
- **导航**：Navigation Component + nav_graph.xml 集中管理 Fragment 路由
- **ViewModel**：每个工具对应一个 ViewModel，持有协程作用域，通过 LiveData 向 UI 层暴露状态
- **Data 层**：Room 数据库（query_history + favorites 两张表）、Jetpack DataStore（用户设置持久化）、OkHttp/Retrofit（网络 API）

### 关键技术组件

| 类别 | 选型 | 用途 |
| --- | --- | --- |
| 语言 | **Kotlin** | 100% Kotlin，无 Java 混编 |
| DI | **Hilt**（Dagger + KSP） | 3 个 Module：AppModule、NetworkModule、ToolModule |
| 网络 | **OkHttp** + **Retrofit** + **Gson** | 调用 IP API、JSON 解析 |
| 数据库 | **Room** + **KSP** | 查询历史和收藏持久化 |
| 存储 | **Jetpack DataStore Preferences** | 设置项持久化 |
| 异步 | **Kotlin Coroutines** | 所有网络请求和工具执行均在 IO 调度器 |
| SSH | **JSch** (0.2.16) | SSH 客户端连接 |
| 地图 | **Leaflet.js**（WebView） | IP 位置可视化 |

### 值得关注的代码细节

1. **依赖注入设计的 ToolModule**：所有工具类（PingTool、PortScanner、TracerouteTool 等）均注册为 @Singleton，由 Hilt 统一管理生命周期。

2. **PortScanner 的分批并行扫描**：全端口扫描时按 100 端口一批分组，每组内通过 async/awaitAll 并发扫描，兼顾速度与资源控制。

3. **PingTool 的双层策略**：优先使用 Java InetAddress.isReachable() 实现跨平台兼容，同时保留 pingWithSystem() 回退到系统原生 ping -c 命令获取更准确的 ICMP 结果。

4. **LanScanner 的 OUI 识别**：内置了 Apple、小米、华为、三星、Raspberry Pi、Espressif（乐鑫）、TP-Link 等主流厂商的 MAC OUI 数据库，无需联网即可识别设备厂商。

5. **IP 后端 API**：使用 https://my.ippure.com/v1/info 作为 IP 查询接口（非 ip-api.com），说明开发者拥有独立的后端能力。

### 项目结构

```
app/src/main/
├── java/org/zeroxin/iptools/
│   ├── data/               # Room 数据库（DAO、Entity）
│   ├── di/                 # Hilt 依赖注入模块
│   ├── model/              # 数据模型（IpInfo, PingResult, PortScanResult 等）
│   ├── network/            # 网络 API 服务（IpApiService）
│   ├── ui/
│   │   └── fragment/       # 所有 Fragment 界面
│   ├── util/               # 工具类（PingTool, PortScanner 等 14 个）
│   ├── viewmodel/          # 各页面的 ViewModel
│   ├── IpToolsApplication.kt
│   └── MainActivity.kt
├── res/
│   ├── layout/             # XML 布局文件
│   ├── drawable/           # 图标资源
│   ├── values/             # 字符串、颜色、主题
│   └── navigation/         # Navigation 导航图
└── AndroidManifest.xml
```

## 四、安装与构建

### 直接安装

这是 Android 原生应用，需要下载 APK 文件安装到 Android 设备上。请在项目的 [GitHub Releases 页面](https://github.com/xin-521/IPtools/releases) 查看是否有已构建的 APK。

### 自行构建

如果你有 Android 开发环境，可以自行编译：

**环境要求：**
- Android Studio Arctic Fox 或更高版本
- JDK 11+
- Android SDK 34

**构建步骤：**

```bash
git clone https://github.com/xin-521/IPtools.git
# 使用 Android Studio 打开项目
# 同步 Gradle 依赖
# 点击 Run 或运行：
./gradlew assembleDebug
```

构建产物为 app/build/outputs/apk/ 目录下的 NetworkTools-1.1-debug.apk。

### 所需权限

App 仅申请网络相关的最基本权限：

- INTERNET — 网络访问
- ACCESS_NETWORK_STATE — 查看网络状态
- ACCESS_WIFI_STATE — 查看 WiFi 信息
- CHANGE_WIFI_STATE — 修改 WiFi 状态（WOL 功能需要）
- CHANGE_NETWORK_STATE — 修改网络状态

未申请任何敏感权限（如位置、相机、存储），隐私保护做得比较干净。

## 五、适用场景

IPtools 的核心用户群体很明确——**开发者、运维人员、网工和 IT 爱好者**。

典型使用场景包括：

- **日常网络排查**：检查本机 IP、Ping 目标、路由追踪定位丢包节点
- **内网运维**：局域网扫描发现设备、端口扫描检查服务暴露情况、SSH 直连服务器
- **域名管理**：DNS 查询验证解析记录、Whois 查询域名注册信息、DNS 基准测试选最快的 DNS
- **网络规划**：子网计算器快速计算 CIDR 范围、广播地址
- **远程管理**：Wake-on-LAN 开机、SSH 远程维护

## 六、总结

IPtools 的价值在于"**集成**"二字。当手机上一个 App 就能完成 Ping、端口扫描、路由追踪、Whois、SSH 等一系列操作时，工作效率的提升是很明显的。从工程角度看，它的代码质量在线——MVVM 架构清晰，Hilt + Room + DataStore 的选型符合当前 Android 开发主流标准，工具类的设计和并发控制也有值得参考的地方。

如果你需要一款全功能的网络诊断 App，或者正在学习 Android 开发中的 MVVM + Hilt 实践，这个项目都值得看一看。

```

