No description
  • Rust 84.6%
  • Shell 11.5%
  • Roff 3.9%
Find a file
Eduard Tolosa 96da996749
Some checks failed
Github Actions / build (push) Has been cancelled
Fix hang, panic and missing IPv6; update to hickory 0.26
Correctness:
- --threads 0 hung forever on buffer_unordered(0)
- a malformed resolver address aborted the process instead of erroring
- AAAA was never looked up, so ipv6_addresses was always empty
- hosts that did not resolve were marked as wildcards
- wildcards were detected with resolvers the run does not query
- --quiet suppressed the results, not just the commentary
- resolvers files now trim spaces, skip comments and keep explicit ports

Performance:
- double check awaited its two lookups in sequence, doubling latency
- the wildcard set was cloned once per host
- stdout was locked and flushed once per host
- addresses are parsed values instead of strings

API:
- addresses reported lowest first, so repeated runs agree
- --ip-version selects v4, v6 or both
- print_results separated from quiet_flag
2026-08-16 13:32:52 -05:00
.github Create make-release.yml 2022-04-12 05:46:39 -05:00
.vscode Add debug config. 2021-05-12 20:40:12 -05:00
files Add demonstration files. 2020-09-28 20:26:08 -05:00
src Fix hang, panic and missing IPv6; update to hickory 0.26 2026-08-16 13:32:52 -05:00
.gitignore Update manpage and exclude binaries folder 2025-08-02 14:02:25 -05:00
builder.sh Update builder.sh 2025-08-02 13:55:38 -05:00
Cargo.lock Fix hang, panic and missing IPv6; update to hickory 0.26 2026-08-16 13:32:52 -05:00
Cargo.toml Fix hang, panic and missing IPv6; update to hickory 0.26 2026-08-16 13:32:52 -05:00
LICENSE Initial commit 2020-09-28 11:47:21 -05:00
README.md Fix hang, panic and missing IPv6; update to hickory 0.26 2026-08-16 13:32:52 -05:00
rusolver.1 Update manpage and exclude binaries folder 2025-08-02 14:02:25 -05:00

Rusolver

Fast DNS resolver written in Rust. Works on Linux, Windows, macOS, Android, Aarch64, ARM and possibly in your oven.

Goal

Offer the community an efficient host resolution tool.

Performance, speed and accuracy

Rusolver is very resource friendly, you can use up to 1000 threads in an single core machine and this will work without any problem, the bottleneck for this tool is your network speed. By default, Rusolver is able to perform resolution for ~1532 hosts per second in good network conditions (tested in an AWS machine). Additionally the tool does a double-check by default for resolved hosts against Cloudflare, Google, Quad9, OpenDNS, Verisign, UncensoredDNS and dns.watch DNS, with that algoritm the possibility to get an false-positive is null.

Demo

The files used in the demo are here. hosts.txt is the list of hosts to perform resolution and the resolved.txt are the ones that Rusolver found as active.

asciicast

Installation

Using precompiled binaries.

Download the asset from the releases page according to your platform.

Using the source code.

  1. You need to have the latest stable Rust version insalled in your system.
  2. Clone the repo or download the source code, then run cargo build --release.
  3. Execute the tool from ./target/release/rusolver or add it to your system PATH to use from anywhere.

Optionally you can just use cargo install rusolver

Using the AUR packages. (Arch Linux)

rusolver can be installed from available AUR packages using an AUR helper. For example,

yay -S rusolver

If you prefer, you can clone the AUR packages and then compile them with makepkg. For example,

git clone https://aur.archlinux.org/rusolver.git && cd rusolver && makepkg -si

Usage

  • By default we only show the resolved hosts
cat hosts.txt | rusolver
  • If you want to see the discovered IP addresses:
cat hosts.txt | rusolver -i
  • By default only A records are looked up. To ask for AAAA instead, or for both:
cat hosts.txt | rusolver -i --ip-version v6
cat hosts.txt | rusolver -i --ip-version both
  • A resolvers file takes one address per line. Blank lines and # comments are skipped, and an entry may carry its own port:
1.1.1.1
8.8.8.8
127.0.0.1:5353

-q/--quiet suppresses the progress commentary; the resolved hosts are still printed. You can tune the --timeout and -t/--threads options according to your needs. See rusolver --help