dnstracer

Crates.iodnstracer
lib.rsdnstracer
version
sourcesrc
created_at2024-10-14 06:57:21.768069
updated_at2024-12-04 15:36:23.729961
descriptionA DNS traceroute tool
homepagehttps://gitlab.com/mat813/dnstracer-rs
repositoryhttps://gitlab.com/mat813/dnstracer-rs
max_upload_size
id1408010
Cargo.toml error:TOML parse error at line 17, column 1 | 17 | autolib = false | ^^^^^^^ unknown field `autolib`, expected one of `name`, `version`, `edition`, `authors`, `description`, `readme`, `license`, `repository`, `homepage`, `documentation`, `build`, `resolver`, `links`, `default-run`, `default_dash_run`, `rust-version`, `rust_dash_version`, `rust_version`, `license-file`, `license_dash_file`, `license_file`, `licenseFile`, `license_capital_file`, `forced-target`, `forced_dash_target`, `autobins`, `autotests`, `autoexamples`, `autobenches`, `publish`, `metadata`, `keywords`, `categories`, `exclude`, `include`
size0
Mathieu Arnold (mat813)

documentation

README

dnstracer

dnstracer is a Rust-based implementation of dnstracer, a DNS tracing tool that follows the chain of DNS servers responsible for resolving a domain name. It helps trace the delegation path from the root DNS servers down to the authoritative servers for a specific domain.

Features

  • Traces DNS delegation paths for domain names.
  • Supports both IPv4 and IPv6 addresses.
  • Allows specifying custom DNS query types.
  • Handles recursive and authoritative DNS queries.
  • Provides detailed output of DNS servers and records.

Installation

Requirements

  • Rust (version 1.XX or higher)
  • Cargo (Rust's package manager)

Installing dnstracer

Clone the repository and build the project using cargo:

cargo install dnstracer

Running

Once built, you can run dnstracer-rs from the target directory:

dnstracer [options] <domain>

Example

dnstracer example.com

This will trace the DNS delegation for the domain example.com, showing the path of DNS servers involved in the resolution.

Usage

dnstracer [OPTIONS] <domain>

Options

  • -c, --no-positive-cache
    • disable positive response caching, default enabled
  • -C, --negative-cache
    • enable negative response caching, default disabled
  • -e, --edns0
    • disable EDNS0, default enabled
  • -o, --overview
    • enable overview of received answers, default disabled
  • -q, --query-type <QUERY_TYPE>
    • The type of record (A, AAAA, NS ...) [default: A]
  • -r, --retries <RETRIES>
    • amount of retries for DNS requests, default 3 [default: 3]
  • -s, --server <SERVER>
    • Start the query at the given DNS server (IP or hostname) If . is specified, A.ROOT-SERVERS.NET will be used [default: .]
  • -t, --timeout <TIMEOUT>
    • Limit time to wait per try [default: 5]
  • -S, --source-address <SOURCE_ADDRESS>
    • use this source address
  • -6, --ipv6
    • Force using IPv6 for DNS queries (no IPv4)
  • -4, --ipv4
    • Force using IPv4 for DNS queries (no IPv6)
  • -T, --tcp
    • Force using TCP for DNS queries
  • -h, --help
    • Print help
  • -V, --version
    • Print version

Output

dnstracer provides detailed output for each DNS server in the delegation chain:

  • The IP address and name of each DNS server.
  • Whether the response is authoritative or not.
  • The DNS records associated with the query.

Sample Output

$ dnstracer www.example.com -o              
Tracing to www.example.com[A] via A.ROOT-SERVERS.NET. (198.41.0.4), maximum of 3 retries
A.ROOT-SERVERS.NET. [.] (198.41.0.4)
 |\___ a.gtld-servers.net. [com] (192.5.6.30)
 |      |\___ ns1.example.com. [example.com] (192.0.2.1) found authoritative answer
 |      |\___ ns2.example.com. [example.com] (198.51.100.1) found authoritative answer
 |       \___ ns2.example.com. [example.com] (2001:db8::1) found authoritative answer
 |\___ a.gtld-servers.net. [com] (2001:503:a83e::2:30)
 |      |\___ ns1.example.com. [example.com] (192.0.2.1) (cached)
 |      |\___ ns2.example.com. [example.com] (198.51.100.1) (cached)
 |       \___ ns2.example.com. [example.com] (2001:db8::1) (cached)
 |\___ b.gtld-servers.net. [com] (192.33.14.30)
 ...
ns1.example.com. (192.0.2.1) 	www.example.com. 86400 IN A 203.0.113.1
ns2.example.com. (198.51.100.1) 	www.example.com. 86400 IN A 203.0.113.1
ns2.example.com. (2001:db8::1) 	www.example.com. 86400 IN A 203.0.113.1

Contributing

  1. Fork the repository.
  2. Create a new branch (git checkout -b feature/your-feature).
  3. Commit your changes (git commit -am 'Add some feature').
  4. Push to the branch (git push origin feature/your-feature).
  5. Create a pull request.

License

This project is licensed under the MIT License. See the LICENSE file for more details.

Commit count: 37

cargo fmt