English | 简体中文
# 安装指南 本文档涵盖 RustNet 在各平台上的所有安装方法。 > **提示:** 想一眼看清哪些发行版打包了 RustNet、各自分发的版本号是多少,请查看 [Repology 上的 RustNet 页面](https://repology.org/project/rustnet/versions)。 ## 目录 - [从发布包安装](#installing-from-release-packages) - [macOS DMG 安装](#macos-dmg-installation) - [Windows MSI 安装](#windows-msi-installation) - [Windows Chocolatey 安装](#windows-chocolatey-installation) - [Linux 包安装](#linux-package-installation) - [FreeBSD 安装](#freebsd-installation) - [Android(Termux)安装](#android-termux-installation) - [通过 Cargo 安装](#install-via-cargo) - [从源码构建](#building-from-source) - [使用 Docker](#using-docker) - [前置要求](#prerequisites) - [权限配置](#permissions-setup) - [GeoIP 数据库(可选)](#geoip-databases-optional) - [故障排查](#troubleshooting) ## 从发布包安装 预构建包可在每个版本的 [GitHub Releases](https://github.com/domcyrus/rustnet/releases) 页面下载。 ### macOS DMG 安装 > **更喜欢 Homebrew?** 如果你已安装 Homebrew,使用 `brew install` 更简单,且无需绕过 Gatekeeper 步骤。参见 [Homebrew 安装](#homebrew-installation)了解详情。 1. **下载**适合你架构的 DMG: - Apple Silicon Mac(M1/M2/M3)使用 `Rustnet_macOS_AppleSilicon.dmg` - Intel Mac 使用 `Rustnet_macOS_Intel.dmg` 2. **打开 DMG** 并将 Rustnet.app 拖拽到 Applications 文件夹 3. **绕过 Gatekeeper**(针对未签名构建): - 首次尝试打开 RustNet 时,macOS 会阻止它,因为应用未签名 - 前往 **系统设置 → 隐私与安全性** - 向下滚动找到 RustNet 被阻止的消息 - 点击 **"仍要打开"** 以允许应用运行 - 再次启动应用时可能需要确认此选择 4. **运行 RustNet**: - 双击 Rustnet.app 以在带 sudo 的终端窗口中启动 - 或从命令行运行:`sudo /Applications/Rustnet.app/Contents/MacOS/rustnet` 5. **可选:创建 shell 访问的符号链接**: ```bash # 创建符号链接,以便在任何位置运行 'rustnet' sudo ln -s /Applications/Rustnet.app/Contents/MacOS/rustnet /usr/local/bin/rustnet # 现在你可以从任何终端运行: sudo rustnet ``` 6. **可选:配置 BPF 权限**(以避免需要 sudo): - 安装 Wireshark 的 BPF 权限助手:`brew install --cask wireshark-chmodbpf` - 注销并重新登录以使组变更生效 - 详细说明参见[权限配置](#permissions-setup)章节 ### Windows MSI 安装 1. **安装 Npcap Runtime**(包捕获必需): - 从 https://npcap.com/dist/ 下载 - 运行安装程序并选择 **"WinPcap API compatible mode"** 2. **下载并安装**适合的 MSI 包: - 64 位 Windows 使用 `Rustnet_Windows_64-bit.msi` - 32 位 Windows 使用 `Rustnet_Windows_32-bit.msi` 3. **运行安装程序**并按照安装向导操作 4. **运行 RustNet**: - 打开命令提示符或 PowerShell - 运行:`rustnet.exe` - 如果未安装 Npcap 或未处于 WinPcap 兼容模式,RustNet 会显示一条有用的错误消息及安装说明 - 注意:根据你的 Npcap 安装设置,你可能需要或不需要 Administrator 特权 ### Windows Chocolatey 安装 在 Windows 上安装 RustNet 最简单的方式是通过 [Chocolatey](https://community.chocolatey.org/packages/rustnet): ```powershell # 在 Administrator PowerShell 中运行 choco install rustnet ``` **注意:** 你仍需要单独安装 [Npcap](https://npcap.com),并启用 "WinPcap API compatible mode"。 ### Linux 包安装 #### Ubuntu PPA(推荐用于 Ubuntu 25.10 Questing 和 26.04 LTS Resolute) 在 Ubuntu 上安装 RustNet 最简单的方式是通过官方 PPA。该 PPA 为以下 Ubuntu 系列发布构建: - Ubuntu 25.10(Questing Quokka) - Ubuntu 26.04 LTS(Resolute Raccoon) ```bash # 添加 RustNet PPA sudo add-apt-repository ppa:domcyrus/rustnet # 更新包列表 sudo apt update # 安装 rustnet sudo apt install rustnet # 使用 sudo 运行 sudo rustnet # 可选:授予 Linux capabilities 以无需 sudo 运行(现代内核 5.8+) sudo setcap 'cap_net_raw,cap_bpf,cap_perfmon+eip' /usr/bin/rustnet rustnet ``` **重要:** 该 PPA 仅支持上述两个系列(Ubuntu 25.10 Questing 和 26.04 LTS Resolute),因为构建需要 Rust 1.88+(项目中使用了 let-chains)。早期 Ubuntu 版本的仓库中没有足够新的 `rustc`。对于旧版 Ubuntu,请使用 GitHub releases 中的 [.deb 包](#debianubuntu-deb-packages)或[从源码构建](#building-from-source)。 #### Debian/Ubuntu(.deb 包) 用于手动安装或非 Ubuntu 的 Debian 系发行版: ```bash # 下载适合你架构的包: # - Rustnet_LinuxDEB_amd64.deb(x86_64) # - Rustnet_LinuxDEB_arm64.deb(ARM64) # - Rustnet_LinuxDEB_armhf.deb(ARMv7) # 安装包(Linux capabilities 会自动配置) sudo dpkg -i Rustnet_LinuxDEB_amd64.deb # 如有需要安装依赖 sudo apt-get install -f # 无需 sudo 运行(post-install 脚本已设置 Linux capabilities) rustnet # 验证 Linux capabilities getcap /usr/bin/rustnet ``` **注意:** .deb 包通过 post-install 脚本自动设置 Linux capabilities,因此你可以无需 sudo 运行 RustNet。 #### RedHat/Fedora/CentOS(.rpm 包) 用于手动安装或不使用 COPR 的发行版: ```bash # 下载适合你架构的包: # - Rustnet_LinuxRPM_x86_64.rpm # - Rustnet_LinuxRPM_aarch64.rpm # 安装包(Linux capabilities 会自动配置) sudo rpm -i Rustnet_LinuxRPM_x86_64.rpm # 或使用 dnf/yum: sudo dnf install Rustnet_LinuxRPM_x86_64.rpm # 无需 sudo 运行(post-install 脚本已设置 Linux capabilities) rustnet # 验证 Linux capabilities getcap /usr/bin/rustnet ``` **注意:** .rpm 包通过 post-install 脚本自动设置 Linux capabilities,因此你可以无需 sudo 运行 RustNet。 #### Arch Linux 该包已包含在 Arch Linux Extra 仓库中([链接](https://archlinux.org/packages/extra/x86_64/rustnet/))。可使用 pacman 安装: ```bash sudo pacman -S rustnet ``` 此外,还有两个 AUR 包可用: - [`rustnet-bin`](https://aur.archlinux.org/packages/rustnet-bin) —— 来自 GitHub Releases 的预编译二进制文件 - [`rustnet-git`](https://aur.archlinux.org/packages/rustnet-git) —— 从源码构建并使用最新提交(由 [@DeepChirp](https://github.com/DeepChirp) 维护) 使用你喜欢的 AUR 助手安装: ```bash # 来自 GitHub Releases 的预编译二进制文件 yay -S rustnet-bin # 或使用最新提交的源码构建 yay -S rustnet-git ``` #### Nix / NixOS RustNet 已收录在 [nixpkgs](https://search.nixos.org/packages?query=rustnet) 中,**stable** 通道(以及 `nixpkgs-unstable`)均已提供。 **在不安装的情况下试用(临时 shell):** ```bash nix-shell -p rustnet # 然后在 shell 中执行: sudo rustnet ``` **在 NixOS 上持久安装** —— 在 `/etc/nixos/configuration.nix` 中添加: ```nix environment.systemPackages = with pkgs; [ rustnet ]; ``` 然后运行 `sudo nixos-rebuild switch`。 **关于权限:** NixOS 的 `/nix/store` 是只读的,因此对二进制文件执行 `sudo setcap` 不会在系统重建后保留。最简单的方式是 `sudo rustnet`。如果希望无需 sudo 运行,可以定义一个携带相应 Linux capabilities 的 NixOS [security.wrappers](https://search.nixos.org/options?channel=unstable&query=security.wrappers) 项: ```nix security.wrappers.rustnet = { source = "${pkgs.rustnet}/bin/rustnet"; owner = "root"; group = "root"; capabilities = "cap_net_raw,cap_bpf,cap_perfmon+eip"; }; ``` 然后通过 wrapper 路径执行 `rustnet`(`/run/wrappers/bin/rustnet`)。 > **即将推出 —— 专用 NixOS 模块。** nixpkgs 正在评审一个 > [`programs.rustnet` 模块](https://github.com/NixOS/nixpkgs/pull/517620)。 > 合并后它会自动为你封装上述 capabilities,整个配置即可简化为: > > ```nix > programs.rustnet.enable = true; > ``` > > 该模块通过 `security.wrappers` 授予 `cap_net_raw`、`cap_bpf` 和 > `cap_perfmon`(但**不**授予 `cap_net_admin`,因为 RustNet 从不需要混杂模式), > 采用与 `programs.mtr`、`programs.wireshark` 相同的模式,让你无需 sudo 即可运行 > `rustnet`。 #### Fedora(COPR - 推荐用于 Fedora 42+) 在 Fedora 上安装 RustNet 最简单的方式是通过官方 COPR 仓库。 ```bash # 启用 COPR 仓库 sudo dnf copr enable domcyrus/rustnet # 安装 rustnet sudo dnf install rustnet # 使用 sudo 运行 sudo rustnet # 可选:授予 Linux capabilities 以无需 sudo 运行(现代内核 5.8+) sudo setcap 'cap_net_raw,cap_bpf,cap_perfmon+eip' /usr/bin/rustnet rustnet ``` **重要:** 由于 Rust 1.88+ 的要求,COPR 仅支持 Fedora 42 和 43。CentOS 和 RHEL 的仓库中没有足够新的 Rust 编译器。对于这些发行版,请使用 GitHub releases 中的 [.rpm 包](#redhatfedoracentos-rpm-packages)或[从源码构建](#building-from-source)。 #### openSUSE Tumbleweed(OBS) RustNet 通过 [openSUSE Build Service](https://build.opensuse.org/package/show/home:domcyrus:rustnet/rustnet) 为 openSUSE Tumbleweed(x86_64 和 aarch64)构建。 ```bash sudo zypper addrepo https://download.opensuse.org/repositories/home:/domcyrus:/rustnet/openSUSE_Tumbleweed/home:domcyrus:rustnet.repo sudo zypper refresh sudo zypper install rustnet # 使用 sudo 运行 sudo rustnet # 可选:授予 Linux capabilities 以无需 sudo 运行(现代内核 5.8+) sudo setcap 'cap_net_raw,cap_bpf,cap_perfmon+eip' /usr/bin/rustnet rustnet ``` #### Homebrew 安装 **在 macOS 上:** ```bash brew install rustnet # 按照安装后显示的提示进行权限配置 ``` **在 Linux 上:** ```bash brew install rustnet # 为 Homebrew 安装的二进制文件授予 Linux capabilities(现代内核 5.8+) sudo setcap 'cap_net_raw,cap_bpf,cap_perfmon+eip' $(brew --prefix)/bin/rustnet # 无需 sudo 运行 rustnet ``` #### 静态二进制文件(可移植 - 任意 Linux 发行版) 为获得最大可移植性,静态二进制文件可在**任意 Linux 发行版**上运行,不受 GLIBC 版本限制。它们完全自包含,不需要任何系统依赖。 ```bash # 下载适合你架构的静态二进制文件: # - rustnet-vX.Y.Z-x86_64-unknown-linux-musl.tar.gz(x86_64) # - rustnet-vX.Y.Z-aarch64-unknown-linux-musl.tar.gz(ARM64) # 解压归档 tar xzf rustnet-vX.Y.Z-x86_64-unknown-linux-musl.tar.gz # 将二进制文件移动到 PATH sudo mv rustnet-vX.Y.Z-x86_64-unknown-linux-musl/rustnet /usr/local/bin/ # 授予 Linux capabilities(现代内核 5.8+) sudo setcap 'cap_net_raw,cap_bpf,cap_perfmon+eip' /usr/local/bin/rustnet # 无需 sudo 运行 rustnet ``` **何时使用静态二进制文件:** - GLIBC 过时的旧发行版(例如 CentOS 7、旧版 Ubuntu) - 最小化/容器化环境 - 难以安装依赖的气隙系统 - 当你需要一个单一的可移植二进制文件时 ### FreeBSD 安装 FreeBSD 支持从版本 0.15.0 开始提供。 #### 从 Ports 或 Packages(未来) 一旦进入 FreeBSD ports: ```bash # 使用 pkg(二进制包) pkg install rustnet # 或从 ports 构建 cd /usr/ports/net/rustnet && make install clean ``` #### 从 GitHub Releases 从 [rustnet-bsd releases](https://github.com/domcyrus/rustnet-bsd/releases) 下载 FreeBSD 二进制文件: ```bash # 下载适合的包 fetch https://github.com/domcyrus/rustnet-bsd/releases/download/vX.Y.Z/rustnet-vX.Y.Z-x86_64-unknown-freebsd.tar.gz # 解压归档 tar xzf rustnet-vX.Y.Z-x86_64-unknown-freebsd.tar.gz # 将二进制文件移动到 PATH sudo mv rustnet-vX.Y.Z-x86_64-unknown-freebsd/rustnet /usr/local/bin/ # 使其可执行 sudo chmod +x /usr/local/bin/rustnet # 使用 sudo 运行 sudo rustnet ``` #### 在 FreeBSD 上从源码构建 ```bash # 安装依赖 pkg install rust libpcap # 克隆仓库 git clone https://github.com/domcyrus/rustnet.git cd rustnet # Release 模式构建 cargo build --release # 可执行文件位于 target/release/rustnet sudo ./target/release/rustnet ``` #### FreeBSD 权限配置 FreeBSD 需要访问 BPF(Berkeley Packet Filter)设备来进行数据包捕获。 **选项 1:使用 sudo 运行(最简单)** ```bash sudo rustnet ``` **选项 2:将用户添加到 bpf 组(推荐)** ```bash # 将你的用户添加到 bpf 组 sudo pw groupmod bpf -m $(whoami) # 注销并重新登录以使组变更生效 # 现在无需 sudo 运行 rustnet ``` **选项 3:更改 BPF 设备权限(临时)** ```bash # 重启后会重置 sudo chmod o+rw /dev/bpf* # 现在无需 sudo 运行 rustnet ``` **验证 FreeBSD 权限:** ```bash # 检查是否在 bpf 组中 groups | grep bpf # 检查 BPF 设备权限 ls -la /dev/bpf* # 不使用 sudo 测试 rustnet --help ``` ### Android(Termux)安装 RustNet 可以通过 [Termux](https://termux.dev/en/) 在 Android 设备上运行,前提是设备已 root。 由于 Android 严格控制网络和进程信息,RustNet 需要 `root` 访问权限(`su`)才能捕获数据包和识别进程。提供一个专门的 Android 构建,静态链接依赖并禁用与 Android 内核环境不兼容的 Linux 特定功能(如 eBPF 和 Landlock)。 #### 前置要求 1. **已 Root** 的 Android 设备(例如通过 Magisk 或 KernelSU) 2. 已安装 **Termux**(从 F-Droid 或 GitHub 获取,*不要*从 Google Play 获取) #### 安装步骤 1. **在 Termux 中安装所需包:** ```bash pkg update pkg install tsu wget tar ``` 2. **下载 Android 二进制文件:** ```bash # 从 GitHub Releases 下载 Android 专用静态二进制文件 wget https://github.com/domcyrus/rustnet/releases/download/vX.Y.Z/rustnet-vX.Y.Z-aarch64-linux-android-musl.tar.gz ``` 3. **解压并安装:** ```bash tar xzf rustnet-vX.Y.Z-aarch64-linux-android-musl.tar.gz # 将其移动到 PATH 中的目录 mv rustnet-vX.Y.Z-aarch64-linux-android-musl/rustnet $PREFIX/bin/ chmod +x $PREFIX/bin/rustnet ``` 4. **以 root 身份运行 RustNet:** ```bash # 你必须以 root 权限运行 RustNet,才能在 Android 上正常工作 sudo rustnet ``` *注意:首次运行时,你的 root 管理器(例如 Magisk)会提示你授予 Termux Superuser 访问权限。* ## 通过 Cargo 安装 ```bash # 直接从 crates.io 安装 cargo install rustnet-monitor # 二进制文件将安装到 ~/.cargo/bin/rustnet # 确保 ~/.cargo/bin 在你的 PATH 中 ``` 安装后,参见[权限配置](#permissions-setup)章节配置权限。 ## 从源码构建 ### 前置要求 - Rust 2024 edition 或更高版本(从 [rustup.rs](https://rustup.rs/) 安装) - 平台特定依赖: - **Linux(Debian/Ubuntu)**: ```bash sudo apt-get install build-essential pkg-config libpcap-dev libelf-dev zlib1g-dev clang llvm ``` - **Linux(RedHat/CentOS/Fedora)**: ```bash sudo yum install make pkgconfig libpcap-devel elfutils-libelf-devel zlib-devel clang llvm ``` - **macOS**:安装 Xcode Command Line Tools:`xcode-select --install` - **FreeBSD**:`pkg install rust libpcap` - **Windows**:安装 Npcap 和 Npcap SDK(参见下方的 [Windows 构建配置](#windows-build-setup)) ### 基本构建 ```bash # 克隆仓库 git clone https://github.com/domcyrus/rustnet.git cd rustnet # Release 模式构建(Linux 上默认启用 eBPF) cargo build --release # 构建不带 eBPF 支持(仅 Linux procfs 模式) cargo build --release --no-default-features # 可执行文件位于 target/release/rustnet ``` 不带 eBPF(仅 procfs 模式)构建时,使用 `cargo build --release --no-default-features`。 ### Windows 构建配置 在 Windows 上构建 RustNet 需要 Npcap SDK 和正确的环境配置: #### 构建需求 1. **下载并安装 Npcap SDK**: - 从 https://npcap.com/dist/ 下载 Npcap SDK - 将 SDK 解压到一个目录(例如 `C:\npcap-sdk`) 2. **设置环境变量**: - 将 `LIB` 环境变量设置为包含 SDK 的库路径: ```cmd set LIB=%LIB%;C:\npcap-sdk\Lib\x64 ``` - 对于 PowerShell: ```powershell $env:LIB = "$env:LIB;C:\npcap-sdk\Lib\x64" ``` - 要永久设置,请添加到你的系统环境变量中 3. **构建 RustNet**: ```cmd cargo build --release ``` #### 运行时需求 1. **安装 Npcap Runtime**: - 从 https://npcap.com/dist/ 下载 Npcap 安装程序 - 运行安装程序并在安装期间**选择 "WinPcap API compatible mode"** - 这确保与包捕获库的兼容性 2. **运行 RustNet**: ```cmd rustnet.exe ``` **注意**:根据你的 Npcap 安装设置,你可能需要或不需要 Administrator 特权。如果你在 Npcap 安装期间没有选择限制数据包捕获到管理员的选项,RustNet 可以用普通用户权限运行。 ## 使用 Docker RustNet 可作为 Docker 容器从 GitHub Container Registry 获取。镜像默认以**非 root** 用户运行,二进制文件内置 `CAP_NET_RAW` file capability,因此基础数据包捕获无需额外参数。 ```bash # 拉取最新镜像 docker pull ghcr.io/domcyrus/rustnet:latest # 或拉取特定版本 docker pull ghcr.io/domcyrus/rustnet:0.7.0 # 方案 A:基础监控(非 root,推荐) # 通过内置 CAP_NET_RAW file capability 捕获数据包。 # 进程归属使用 /proc(禁用 eBPF),无需 --cap-add。 docker run --rm -it --net=host ghcr.io/domcyrus/rustnet:latest # 方案 B:完整 eBPF 进程归属(以 root 运行并增加 capabilities) # eBPF 需要 CAP_BPF 和 CAP_PERFMON。仅使用 --cap-add 无法让非 root # 用户获得这些有效 capabilities,因此还需要以 root 运行。 docker run --rm -it --user root \ --cap-add=NET_RAW --cap-add=BPF --cap-add=PERFMON --net=host \ ghcr.io/domcyrus/rustnet:latest # 使用指定接口(两种方案均可,在末尾添加 -i) docker run --rm -it --net=host ghcr.io/domcyrus/rustnet:latest -i eth0 # 替代方案:privileged 模式(最简单,安全性最低) docker run --rm -it --privileged --net=host \ ghcr.io/domcyrus/rustnet:latest # 查看可用选项 docker run --rm ghcr.io/domcyrus/rustnet:latest --help ``` **注意:** 基础捕获(方案 A)不需要特殊参数,镜像通过 `CAP_NET_RAW` file capability 以非 root 用户运行。基于 eBPF 的进程归属(方案 B)还需要 `CAP_BPF` 和 `CAP_PERFMON`;这些 capabilities 无法通过 file capabilities 授予非 root 用户,因此需要使用 `--user root` 和对应的 `--cap-add` 参数。无论使用哪种方案,rustnet 都会在启动后立即丢弃这些 capabilities 并启用沙箱。建议使用主机网络(`--net=host`)监控所有接口。 ## 权限配置 RustNet 需要提升的特权来捕获网络数据包,因为在所有现代操作系统上,访问网络接口进行数据包捕获是一项特权操作。本章节解释如何在不同平台上正确授予这些权限。 > ### **安全优势:Linux 上的只读网络访问** > > **RustNet 在所有平台上使用只读数据包捕获,不启用混杂模式。** 这意味着: > > **Linux:** 仅需要 **`CAP_NET_RAW`** 这项 Linux capability —— **不需要**完整的 root 或 `CAP_NET_ADMIN` > **最小权限原则:** 数据包捕获所需的最小权限 > **无混杂模式:** 仅捕获往返于主机的数据包(而非所有网络流量) > **只读:** 不能修改或注入数据包 > **增强安全性:** 与完整 root 访问相比,攻击面更小 > > **macOS 注意:** PKTAP(用于进程元数据)需要 root 特权,但你可以在不使用 sudo 的情况下运行,使用 `lsof` 回退进行基本数据包捕获。 ### 为什么需要权限 网络数据包捕获需要访问: - **Raw socket** 用于低层网络访问(只读、非混杂模式) - **网络接口** 用于数据包捕获 - macOS/BSD 系统上的 **BPF(Berkeley Packet Filter)设备** - 某些 Linux 配置上的 **网络命名空间** 这些 Linux capabilities 受到限制,以防止恶意软件拦截网络流量。 ### macOS 权限配置 在 macOS 上,数据包捕获需要访问位于 `/dev/bpf*` 的 BPF(Berkeley Packet Filter)设备。 **注意:** macOS PKTAP(用于从数据包中提取进程元数据)需要 **root/sudo** 特权。不使用 sudo 时,RustNet 使用 `lsof` 作为进程检测的回退(较慢,但无需 root)。 #### 选项 1:使用 sudo 运行(最简单) ```bash # 使用 sudo 构建并运行 cargo build --release sudo ./target/release/rustnet ``` #### 选项 2:BPF 组访问(推荐) 将用户添加到 `access_bpf` 组以实现免密码数据包捕获: **使用 Wireshark 的 ChmodBPF(用于基本数据包捕获):** ```bash # 安装 Wireshark 的 BPF 权限助手 brew install --cask wireshark-chmodbpf # 注销并重新登录以使组变更生效 # 然后无需 sudo 运行 rustnet: rustnet # 使用 lsof 进行进程检测(较慢) # 如需 PKTAP 支持以从包头部获取进程元数据,请使用 sudo: sudo rustnet # 使用 PKTAP 进行更快的进程检测 ``` **注意**:`wireshark-chmodbpf` 授予对 `/dev/bpf*` 的数据包捕获访问权限,但 **PKTAP** 是一个独立的特权内核接口,无论 BPF 权限如何都需要 root 特权。TUI 会显示当前使用的检测方法(使用 sudo 时为 "pktap",不使用 sudo 时为 "lsof")。 **手动 BPF 组配置:** ```bash # 创建 access_bpf 组(如果不存在) sudo dseditgroup -o create access_bpf # 将用户添加到组中 sudo dseditgroup -o edit -a $USER -t user access_bpf # 设置 BPF 设备权限(每次重启后都需要执行) sudo chmod g+rw /dev/bpf* sudo chgrp access_bpf /dev/bpf* # 注销并重新登录以使组成员身份生效 ``` #### 选项 3:Homebrew 安装 如果通过 Homebrew 安装,formula 会提供详细的配置说明: ```bash brew install rustnet # 按照安装后显示的提示操作 ``` ### Linux 权限配置(只读访问 - 无需 Root!) **Linux 优势:** RustNet 进行数据包捕获**仅需要 `CAP_NET_RAW`** —— 远少于完整的 root 访问! 在 Linux 上,数据包捕获仅需要 `CAP_NET_RAW` 这项 Linux capability,用于只读、非混杂数据包捕获。对于 eBPF 增强型进程追踪,需要额外的 Linux capabilities(`CAP_BPF` 和 `CAP_PERFMON`),但**不需要 `CAP_NET_ADMIN`**。 #### 选项 1:使用 sudo 运行(最简单) ```bash # 使用 sudo 构建并运行 cargo build --release sudo ./target/release/rustnet ``` #### 选项 2:授予 Linux capabilities(推荐) 为二进制文件授予特定的 Linux capabilities,而无需完整的 root 特权: **对于源码构建:** ```bash # 先构建二进制文件 cargo build --release # 为二进制文件授予 Linux capabilities(现代内核 5.8+,带 eBPF 支持) sudo setcap 'cap_net_raw,cap_bpf,cap_perfmon+eip' ./target/release/rustnet # 现在无需 sudo 运行 ./target/release/rustnet ``` **对于 cargo 安装的二进制文件:** ```bash # 如果通过 cargo install rustnet-monitor 安装(现代内核 5.8+) sudo setcap 'cap_net_raw,cap_bpf,cap_perfmon+eip' ~/.cargo/bin/rustnet # 现在无需 sudo 运行 rustnet ``` **对于启用 eBPF 的构建(增强型 Linux 性能 - 默认启用):** eBPF 在 Linux 构建上默认启用,使用内核探针提供低开销的进程识别: ```bash # Release 模式构建(默认启用 eBPF) cargo build --release # 现代 Linux(5.8+)- 仅需这三个 Linux capabilities: sudo setcap 'cap_net_raw,cap_bpf,cap_perfmon+eip' ./target/release/rustnet ./target/release/rustnet # 仅包捕获(eBPF 会回退到 procfs) sudo setcap 'cap_net_raw+eip' ./target/release/rustnet ./target/release/rustnet # 检查 TUI 统计面板 - 应显示 "Process Detection: eBPF + procfs" ``` **Linux capabilities 需求:** **基础 Linux capabilities(始终需要):** - `CAP_NET_RAW` —— 用于只读数据包捕获的 raw socket 访问(非混杂模式) **eBPF 所需的 Linux capabilities(根据内核版本选择):** **现代 Linux(5.8+):** - `CAP_BPF` —— BPF 程序加载和 map 操作 - `CAP_PERFMON` —— 性能监控和追踪操作 **旧版 Linux(pre-5.8):** - eBPF 操作需要宽泛的 `CAP_SYS_ADMIN`。不建议默认授予它;请使用 `CAP_NET_RAW` 进行包捕获,并让 RustNet 回退到 procfs 进程检测,除非你明确接受该风险。 **注意:** 不需要 CAP_NET_ADMIN。RustNet 使用不带混杂模式的只读数据包捕获。 **回退行为**:如果 eBPF 无法加载(例如 Linux capabilities 不足、内核不兼容),应用会自动使用仅 procfs 模式。TUI 统计面板显示当前使用的检测方法: - `Process Detection: eBPF + procfs` —— eBPF 成功加载 - `Process Detection: procfs` —— 使用 procfs 回退 **注意:** eBPF 在 Linux 构建上默认启用,进程名显示可能存在局限性。有关 eBPF 实现的详情参见 [ARCHITECTURE.zh-CN.md](ARCHITECTURE.zh-CN.md)。要构建不带 eBPF 的版本,使用 `cargo build --release --no-default-features`。 **对于系统级安装:** ```bash # 如果通过包管理器安装或复制到 /usr/local/bin(现代内核 5.8+) sudo setcap 'cap_net_raw,cap_bpf,cap_perfmon+eip' /usr/local/bin/rustnet rustnet ``` ### Windows 权限与进程归属配置 Windows 上有两套相互独立的权限: 1. **数据包捕获**使用 Npcap。RustNet 是否必须以 Administrator 身份运行, 取决于安装 Npcap 时选择的选项。如果 Npcap 被配置为仅允许管理员捕获, 请使用**以管理员身份运行**启动命令提示符、PowerShell 或 Windows Terminal; 否则标准用户进程也可以捕获数据包。 2. **进程归属**优先使用 Windows 事件跟踪(ETW),并始终保留 IP Helper API 用于校准和回退。 启动时,RustNet 会尝试订阅 Windows 内核网络与进程 ETW provider。概览标签页会显示实际使用的模式: | Detection 显示 | 含义 | |---|---| | `ETW + IP Helper` | 事件驱动的进程归属已启用。ETW 可捕获短生命周期进程,IP Helper 用于补全缓存未命中项并校准当前 socket。 | | `IP Helper` | ETW 无法启动。RustNet 不会因此退出,而是继续使用 `GetExtendedTcpTable` 和 `GetExtendedUdpTable`;在两次表快照之间结束的极短生命周期进程可能会被遗漏。 | 以 Administrator 身份运行是启用 ETW 兼容性最好的方式。作为权限更小的 替代方案,本地管理员可以将用户加入内置的 **Performance Log Users(性能日志用户)** 组(SID `S-1-5-32-559`),然后让该用户注销并重新登录。特定 ETW provider 仍可能被系统安全策略拒绝,因此应以概览标签页显示的模式为准,而不要假定 ETW 一定已启用。 ETW 授权与 Npcap 授权彼此独立。加入 **Performance Log Users** 不会授予 数据包捕获权限;ETW 不可用时,非管理员仍可使用 IP Helper 进行进程归属。 无需手动选择回退选项,RustNet 会自动使用当前可用的最佳模式。 即使 ETW 已启用,仍可能出现少量 `