mrjackwills/havn


A fast configurable port scanner with reasonable defaults

License: MIT

Language: Rust

Keywords: async, docker, port, port-scanner, rust, scanner, tokio


havn

A fast configurable port scanner with reasonable defaults

Description

havn - ˈheɪvən || "HAY" "vuhn" - is a lightweight self-contained port scanning application written in Rust, using asynchronous Tokio multithreading to deliver fast and reliable results. With sensible defaults and configurable options, users are able customise the scanning process according to their needs. It is designed and built to be compatible with multiple platforms, including Docker, and has a binary size of less than 1mb.

Download & install

Cargo

Published on crates.io, so if you have cargo installed, simply run

cargo install havn

Arch Linux

havn is available in the official repositories. You can install it using:

pacman -S havn

Docker

Published on Docker Hub and ghcr.io, with images built for linux/amd64, linux/arm64, and linux/arm/v6

via Docker Hub

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

via ghcr.io

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

❗Caution: To scan the Docker host itself, you must grant access by including the option:

--network=host

Pre-Built

See the pre-built binaries

or, download & install (x86_64 one liner)

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

or, for automatic platform selection, download, and installation (to $HOME/.local/bin)

One should always verify script content before running in a shell

curl https://raw.githubusercontent.com/mrjackwills/havn/main/install.sh | bash

Run

havn #[options]

Available command line arguments

argument result
[string] The address or IP to scan. [default: 127.0.0.1]
-a Scan every port, from 1 to 65535, conflicts with -p
-c [number] How many concurrent request should be made. [default: 1000]
-m Monochrome mode - won't colourize the output [default: false]
-p [number / string] Inclusive port range to scan, accepts either a range: -300, 101-200, or a single port 80, conflicts with -a [default: -1000]
-r [number] Retry attempts per port. [default: 1]
-t [number] Timeout for each request in milliseconds. [default: 2000]
-6 Scan the IPv6 address instead of IPv4, [default: false]

Examples

# 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

Todo

  • Scan UDP ports, currently only TCP
  • allow multiple addresses/IPs to be scanned
  • monitor response times to automatically modify request settings
  • configurable option to disable second-pass scan
  • debug option to display more verbose output
  • improve windows performance
  • publish to npm

Tests

A number of tests will open port 80, this may cause issues if the port is already open on your system

cargo test -- --test-threads=1

Build step

x86_64

cargo build --release

Cross platform

Using Docker

requires Docker & cross-rs

64bit arm (pi 4, pi zero w 2)

cross build --target aarch64-unknown-linux-musl --release

32bit pi (pi zero w)

cross build --target arm-unknown-linux-musleabihf --release

Windows x86_64

cross build --target x86_64-pc-windows-gnu --release

Without Docker

64bit arm (pi 4, pi zero w 2)

edit ~/.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

32bit pi (pi zero w)

edit ~/.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 (build on linux)

edit ~/.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

Untested on other platforms

Project Statistics

Sourcerank 7
Repository Size 1.61 MB
Stars 172
Forks 5
Watchers 5
Open issues 2
Dependencies 4
Contributors 4
Tags 17
Created
Last updated
Last pushed

Top Contributors See all

Jack Wills Thorsten Hans Chleba Orhun Parmaksız

Packages Referencing this Repo

havn
A fast configurable port scanner with reasonable defaults
Latest release 0.1.16 - Updated - 172 stars

Recent Tags See all

v0.1.16 October 20, 2024
v0.1.15 October 20, 2024
v0.1.14 September 06, 2024
v0.1.13 July 25, 2024
v0.1.12 June 17, 2024
v0.1.11 May 06, 2024
v0.1.10 April 15, 2024
v0.1.9 March 31, 2024
v0.1.8 February 12, 2024
v0.1.7 December 30, 2023
v0.1.6 November 17, 2023
v0.1.5 October 09, 2023
v0.1.4 August 25, 2023
v0.1.3 July 30, 2023
v0.1.2 June 04, 2023

Interesting Forks See all

orhun/havn
A fast configurable port scanner with reasonable defaults
MIT - Updated - 1 stars

Something wrong with this page? Make a suggestion

Last synced: 2024-10-20 11:05:03 UTC

Login to resync this repository