#端口扫描 #端口 #端口扫描 #docker #扫描 #tokio

应用 havn

一个快速且可配置的默认合理的端口扫描器

14 个版本

0.1.13 2024年7月25日
0.1.11 2024年5月6日
0.1.9 2024年3月31日
0.1.7 2023年12月30日
0.1.3 2023年7月30日

#143命令行实用程序

Download history 174/week @ 2024-04-15 3/week @ 2024-04-29 168/week @ 2024-05-06 8/week @ 2024-05-13 20/week @ 2024-05-20 2/week @ 2024-05-27 1/week @ 2024-06-03 5/week @ 2024-06-10 178/week @ 2024-06-17 9/week @ 2024-06-24 153/week @ 2024-07-22 21/week @ 2024-07-29

174 每月下载量

MIT 许可证

210KB
1.5K SLoC

Rust 1K SLoC // 0.0% comments Shell 339 SLoC // 0.1% comments

havn

一个快速且可配置的默认合理的端口扫描器

描述

havn - ˈheɪvən || "HAY" + "vuhn" - 是一个轻量级自包含的端口扫描应用程序,用 Rust 编写,使用异步 Tokio 多线程提供快速和可靠的结果。具有合理的默认值和可配置选项,用户可以根据自己的需求自定义扫描过程。它设计和构建为与多个平台兼容,包括 Docker,并且二进制文件大小小于 1mb。

下载 & 安装

Cargo

发布在 crates.io,因此如果您已安装 cargo,只需运行

cargo install havn

Arch Linux

havn 可在 官方仓库 中找到。您可以使用以下命令安装它

pacman -S havn

Docker

发布在 Docker Hubghcr.io,并提供了为 linux/amd64linux/arm64linux/arm/v6 构建的镜像

通过 Docker Hub

docker run --rm -it mrjackwills/havn:latest #[options]

通过 ghcr.io

docker run --rm -it ghcr.io/mrjackwills/havn:latest #[options]

❗注意:要扫描 Docker 主机本身,您必须通过包含选项来授予访问权限

--network=host

预构建

查看 预构建的二进制文件

或,下载 & 安装 (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]

可用的命令行参数

参数 结果
[字符串] 要扫描的地址或IP。[默认:127.0.0.1]
-a 扫描每个端口,从165535,与-p冲突
-c[数字] 应发起多少个并发请求。[默认:1000]
-m 单色模式 - 不会对输出着色 [默认:false]
-p[数字/字符串] 要扫描的端口号范围,接受范围:-300101-200,或单个端口80,与-a冲突 [默认:-1000]
-r[数字] 每个端口的重试次数。[默认:1]
-t[数字] 每个请求的超时时间(毫秒)。[默认:2000]
-6 扫描IPv6地址而不是IPv4,[默认:false]

示例

# Scan github.com using the default settings
havn github.com

# Scan default address [127.0.0.1], all ports [1-65535],
# 2048 concurrent requests, 500ms timeout, 0 retries, IPv4
havn -a -c 2048 -t 500 -r 0

# Scan www.google.com, ports 10-600,
# 500 concurrent requests, 3000ms timeout, default retries [1], IPv4
havn www.google.com -p 10-600 -c 500 -t 3000 

# Scan www.digitalocean.com, ports 1-100
# default concurrent requests[1000], 1000ms timeout, and use IPv6 address
havn www.digitalocean.com -p -100 -t 1000 -6

# Scan www.bbc.com, port 443 only
# default concurrent requests[1000], default timeout[2000ms], 6 retries, IPv4
havn www.bbc.com -p 443 -r 6

待办事项

  • 扫描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-musleabihf --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

在其他平台上未测试

依赖关系

~4–13MB
~138K SLoC