mrjackwills/havn

GitHub: mrjackwills/havn

havn 是一款基于 Rust 异步多线程构建的轻量级 TCP 端口扫描器,开箱即用地提供快速、可配置的端口探测能力。

Stars: 316 | Forks: 9

havn

A fast configurable port scanner with reasonable defaults

## 描述 `havn` - `ˈheɪvən` || `"HAY" + "vuhn"` - 是一个用 Rust 编写的、轻量级且独立的端口扫描应用程序, 它使用异步的 Tokio 多线程来提供快速且可靠的结果。 凭借合理的默认设置和可配置的选项,用户可以根据自己的需求自定义扫描过程。 它的设计和构建兼容多个平台,包括 Docker,并且二进制文件大小不到 1mb。 ## 下载与安装 ### Cargo 已发布在 crates.io,因此如果您已安装 cargo,只需运行 ``` cargo install havn ``` ### Arch Linux `havn` 可在[官方仓库](https://archlinux.org/packages/extra/x86_64/havn)中找到。您可以使用以下命令进行安装: ``` pacman -S havn ``` ### Docker 已发布在 Docker Hubghcr.io, 并为 `linux/amd64`、`linux/arm64` 和 `linux/arm/v6` 构建了镜像 **通过 ghcr.io** ``` docker run --rm -it ghcr.io/mrjackwills/havn:latest #[options] ``` **通过 Docker Hub** ``` docker run --rm -it mrjackwills/havn:latest #[options] ``` ❗注意:要扫描 Docker 主机本身,您必须通过包含以下选项来授予访问权限: ``` --network=host ``` ### X-CMD 如果您是 [x-cmd](https://x-cmd.com/install/havn) 用户,可以使用以下命令进行安装: ``` x install havn ``` ### 预构建 请查看 预构建二进制文件 或者,下载并安装(x86_64 一行命令) ``` wget https://www.github.com/mrjackwills/havn/releases/latest/download/havn_linux_x86_64.tar.gz && tar xzvf havn_linux_x86_64.tar.gz havn && install -Dm 755 havn -t "${HOME}/.local/bin" && rm havn_linux_x86_64.tar.gz havn ``` 或者,自动选择平台、下载并安装(至 `$HOME/.local/bin`) *在 shell 中运行之前,应始终验证脚本内容* ``` curl https://raw.githubusercontent.com/mrjackwills/havn/main/install.sh | bash ``` ## 运行 ``` havn #[options] ``` 可用的命令行参数 | 参数|结果| |--|--| | ```[string]``` | 要扫描的地址或 IP。[默认:`127.0.0.1`] | |```-a``` | 扫描从 `1` 到 `65535` 的所有端口,与 `-p` 冲突 | |```-c [number]``` | 应该发送多少个并发请求。[默认:`1000`] | |```-m``` | 单色模式 - 输出不着色 [默认:`false`] | |```-p [number / string]``` | 要扫描的包含端口范围,接受一个范围:`-300`、`101-200`,或单个端口 `80`,与 `-a` 冲突 [默认:`-1000`] | |```-r [number]``` | 每个端口的重试次数。[默认:`1`] | |```-t [number]``` | 每个请求的超时时间(以毫秒为单位)。[默认:`2000`] | |```-6``` | 扫描 IPv6 地址而不是 IPv4,[默认:`false`] | |```--verbose``` | 扫描时显示简单的详细输出信息| ### 示例 ``` # 使用默认设置扫描 github.com havn github.com # 扫描默认地址 [127.0.0.1],所有端口 [1-65535], # 2048 个并发请求,500ms 超时,0 次重试,IPv4 havn -a -c 2048 -t 500 -r 0 # 扫描 www.google.com,端口 10-600, # 500 个并发请求,3000ms 超时,默认重试次数 [1],IPv4 havn www.google.com -p 10-600 -c 500 -t 3000 # 扫描 www.digitalocean.com,端口 1-100 # 默认并发请求[1000],1000ms 超时,并使用 IPv6 地址 havn www.digitalocean.com -p -100 -t 1000 -6 # 扫描 www.bbc.com,仅端口 443 # 默认并发请求[1000],默认超时[2000ms],6 次重试,IPv4 havn www.bbc.com -p 443 -r 6 ``` ### 待办事项 - [x] debug 选项以显示更详细的输出 - [ ] 扫描 UDP 端口,目前仅支持 TCP - [ ] 允许扫描多个地址/IP - [ ] 监控响应时间以自动修改请求设置 - [ ] 可配置选项以禁用第二轮扫描 - [ ] 提升 windows 性能 - [ ] 发布到 npm ## 测试 部分测试会开放 80 端口,如果您的系统上该端口已开放,这可能会导致问题 ``` cargo test -- --test-threads=1 ``` ## 构建步骤 ### x86_64 ``` cargo build --release ``` ### 跨平台 ### 使用 Docker 需要 Dockercross-rs #### 64位 arm (pi 4, pi zero w 2) ``` cross build --target aarch64-unknown-linux-musl --release ``` #### 32位 pi (pi zero w) ``` cross build --target arm-unknown-linux-musleabihf --release ``` #### Windows x86_64 ``` cross build --target x86_64-pc-windows-gnu --release ``` ### 不使用 Docker #### 64位 arm (pi 4, pi zero w 2) 编辑 `~/.cargo/config` ``` [target.aarch64-unknown-linux-musl] linker = "rust-lld" ``` ``` rustup target add aarch64-unknown-linux-musl cargo build --target aarch64-unknown-linux-musl --release ``` #### 32位 pi (pi zero w) 编辑 `~/.cargo/config` ``` [target.arm-unknown-linux-musleabihf] linker = "arm-linux-gnueabihf-ld" ``` ``` sudo apt update && sudo apt install gcc-arm-linux-gnueabihf -y rustup target add arm-unknown-linux-musleabihf cargo build --target arm-unknown-linux-musleabihf --release ``` #### Windows (在 linux 上构建) 编辑 `~/.cargo/config` ``` [target.x86_64-pc-windows-gnu] linker = "x86_64-w64-mingw32-gcc" ar = "x86_64-w64-mingw32-gcc-ar" ``` ``` sudo apt update && sudo apt install mingw-w64 rustup target add x86_64-pc-windows-gnu cargo build --target x86_64-pc-windows-gnu --release ``` **在其他平台上未经测试**
标签:Prompt Injection, Rust, Tokio, 可视化界面, 异步编程, 插件系统, 数据统计, 端口扫描, 网络安全, 网络工具, 网络流量审计, 请求拦截, 通知系统, 隐私保护