# ipc-net-discovery **Repository Path**: roggie/ipc-net-discovery ## Basic Information - **Project Name**: ipc-net-discovery - **Description**: A lightweight UDP-based IPC discovery and network provisioning tool. 基于 UDP 广播的 IPC 设备发现与网络配置工具,适用于 RK3588 / RK1126 等嵌入式设备。 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 3 - **Created**: 2026-02-01 - **Last Updated**: 2026-02-01 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # ipc-net-discovery **当前版本:v0.1.0** IPC 网络发现与配置:PC 端 Qt 发现工具 + 设备端响应守护进程,通过 UDP 广播发现设备并修改 IP/掩码/网关/DNS/DHCP。**支持跨网段发现与配置**:PC 多网卡时可一键发现并配置多个网段内的设备,无需逐网段操作。 ## 界面预览 PC 端 **ipc_net_tool** 主界面(暗色主题):设备列表、网络参数表单、「搜索设备」「修改网络」按钮及状态栏。多台设备按 MAC+接口 区分,每台/每口单独一行。 ![ipc_net_tool 就绪界面](docs/screenshots/image.png) ## 功能概览 - **发现**:PC 端向各网卡所在网段发送 DISCOVER 广播,设备端回复 DISCOVER_ACK(含 SN、MAC、IP、掩码、网关、DHCP、版本等);**多网卡时自动覆盖多网段,跨网段一键发现**。 - **配置**:PC 端选中设备后发送 SET_NET,设备端写入网络配置(ifupdown / NetworkManager / netplan)并重启生效;同一次搜索可管理不同网段设备。 - **协议**:UDP + JSON,magic `IPC_NET_TOOL_V1`;端口 37020(服务)、37021(ACK)。 ## 架构 ```mermaid sequenceDiagram participant PC as ipc_net_tool participant Device as ipc_netd PC->>Device: DISCOVER (UDP 广播) Device->>PC: DISCOVER_ACK (广播 37021) PC->>Device: SET_NET (单播/目标) Device->>PC: SET_NET_ACK (广播 37021) ``` | 组件 | 说明 | 平台 | |------|------|------| | **ipc_net_tool** | Qt 图形工具:搜索设备、列表展示、修改网络 | Windows(Qt5/Qt6) | | **ipc_netd** | 守护进程:响应 DISCOVER、执行 SET_NET、写 interfaces/nmcli/netplan | Linux(RK3588/Buildroot 等) | ## 目录结构 ``` ipc-net-discovery/ ├── .editorconfig ├── ipc_net_tool/ # PC 端 Qt 工具(Windows) ├── ipc_netd/ # 设备端守护进程(Linux) ├── docs/screenshots/ # 界面截图 ├── LICENSE ├── CHANGELOG.md ├── CONTRIBUTING.md └── README.md ``` ## 快速开始 1. **设备端**:在 Linux 上编译并运行 ipc_netd(见下方 [ipc_netd 编译与运行](#ipc_netd-编译与运行))。 2. **网络**:PC 与设备在同一二层(同网段或同交换机);PC 多网卡时可跨网段发现与配置。 3. **PC 端**:在 Windows 上编译并运行 ipc_net_tool(见下方 [ipc_net_tool 编译与运行](#ipc_net_tool-编译与运行)),按 [使用说明](#使用说明) 操作。 --- ## 使用说明 面向最终用户:如何用 PC 端工具发现设备并修改网络。 ### 使用前准备 - **设备端**:每台需要配置的 IPC 设备上已运行 **ipc_netd**(Linux),且与 PC 网络互通(同网段或同交换机;PC 多网卡时可覆盖多网段)。 - **PC 端**:在 Windows 上已编译并能正常启动 **ipc_net_tool**(见下方 [ipc_net_tool 编译与运行](#ipc_net_tool-编译与运行))。 ### 第一步:发现设备 1. 打开 **ipc_net_tool**。 2. 点击右上角 **「搜索设备」**。 3. 程序会向本机各网卡所在网段发送发现请求;约几秒内,下方表格会列出所有响应的设备(每台设备的每个网口占一行,显示接口、SN、MAC、IP、子网掩码、网关、DHCP、版本)。 4. 若列表为空:请确认设备端 ipc_netd 已运行、PC 与设备在同一二层、防火墙未拦截 UDP 37020/37021。 ### 第二步:修改网络 1. 在表格中 **选中要修改的那一行**(单击该行)。 2. 下方「网络参数」区域会带出该设备当前 IP、掩码、网关等(可改)。 3. 按需修改: - **静态 IP**:取消勾选「使用 DHCP」,填写 IP 地址、子网掩码、默认网关、首选/备用 DNS。 - **DHCP**:勾选「使用 DHCP」,由路由器分配 IP。 4. 点击 **「修改网络」**。 5. 状态栏会显示「修改成功」或「修改失败」及原因;**修改成功后设备会自动重启**,新 IP 生效(可再次点击「搜索设备」确认)。 ### 注意事项 - 修改前请确认目标 IP 与局域网内其他设备不冲突(工具会做冲突检测,冲突时会提示)。 - 设备重启后旧 IP 会断开,新 IP 生效;若通过当前 IP 远程操作,请先改好新 IP 再点修改,避免失联。 - 多台设备时按 **MAC + 接口** 区分行,同一设备多网口会多行;选中对应行再修改即可。 --- ## ipc_net_tool 编译与运行 **仅支持 Windows**,需 Qt5 或 Qt6(Widgets + Network)。在 Windows 本机编译,不要用 WSL。 **依赖**:安装 [Qt](https://www.qt.io/download)(MinGW 或 MSVC 套件)。 **CMake 编译**(示例,路径按本机 Qt 安装修改): ```cmd cd ipc_net_tool mkdir build && cd build cmake -G "MinGW Makefiles" -DCMAKE_PREFIX_PATH=D:/QT/6.5.3/mingw_64 -DCMAKE_BUILD_TYPE=Release .. cmake --build . ``` 或使用 MSVC:`cmake -DCMAKE_PREFIX_PATH=C:/Qt/6.5.3/msvc2019_64 ..` 后 `cmake --build . --config Release`。 也可用 **Qt Creator** 或 **CLion** 打开 `ipc_net_tool` 目录(选该目录而非仓库根目录),配置 `CMAKE_PREFIX_PATH` 为 Qt 路径,用 CMake 目标构建与运行。不要对 `main.cpp` 单文件编译。 **运行**:设备端先起 ipc_netd,PC 与设备同二层;打开 ipc_net_tool,点击「搜索设备」,选中设备后填 IP/掩码/网关/DNS,勾选「使用 DHCP」或静态,点击「修改网络」。状态栏显示成功或失败。 --- ## ipc_netd 编译与运行 **仅支持 Linux**(RK3588、Buildroot 等)。响应 DISCOVER、执行 SET_NET,支持 ifupdown、NetworkManager、netplan。 **依赖**:C++17,CMake;网络环境需 ifupdown 或 nmcli 或 netplan。 **编译**: ```bash cd ipc_netd mkdir build && cd build cmake .. make ``` 可执行文件在 `build/ipc_netd`。交叉编译:`cmake -DCMAKE_TOOLCHAIN_FILE=/path/to/toolchain.cmake ..`。 **安装**:`sudo make install`,默认安装到 `/usr/bin`。可选安装 systemd/init.d(见 `ipc_netd/CMakeLists.txt` 的 install 规则)。 **运行**: - 直接:`ipc_netd` 或 `ipc_netd 37020`(默认端口 37020)。 - init.d:复制 `init.d/ipc-netd` 到 `/etc/init.d` 后 `start`/`stop`/`restart`。 - systemd:复制 `systemd/ipc-netd.service` 到 `/lib/systemd/system`,`ExecStart=/usr/bin/ipc_netd`,然后 `systemctl daemon-reload && systemctl enable ipc-netd && systemctl start ipc-netd`。 --- ## 协议与端口 - **Magic**:`IPC_NET_TOOL_V1` - **服务端口**:37020(ipc_netd 监听,可传参修改) - **ACK 端口**:37021(PC 绑定此端口接收 DISCOVER_ACK / SET_NET_ACK) 设备端将 ACK 发往广播地址的 37021,PC 需绑定 37021 才能收到。 --- [CONTRIBUTING](CONTRIBUTING.md) 贡献与安全问题(请勿公开披露漏洞) ## License 本项目采用 [MIT](LICENSE) 许可证。使用与分发时请保留作者及版权信息(见 LICENSE 与各源文件头部)。