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 Hub 和 ghcr.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
需要 Docker 和 cross-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, 可视化界面, 异步编程, 插件系统, 数据统计, 端口扫描, 网络安全, 网络工具, 网络流量审计, 请求拦截, 通知系统, 隐私保护