Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/ogham/dog
A command-line DNS client.
https://github.com/ogham/dog
client command-line dns rust
Last synced: 2 days ago
JSON representation
A command-line DNS client.
- Host: GitHub
- URL: https://github.com/ogham/dog
- Owner: ogham
- License: eupl-1.2
- Created: 2020-04-25T16:53:10.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2024-05-29T11:36:13.000Z (7 months ago)
- Last Synced: 2024-12-03T03:06:06.478Z (9 days ago)
- Topics: client, command-line, dns, rust
- Language: Rust
- Homepage: https://dns.lookup.dog/
- Size: 864 KB
- Stars: 6,192
- Watchers: 38
- Forks: 177
- Open Issues: 74
-
Metadata Files:
- Readme: README.md
- Funding: .github/FUNDING.yml
Awesome Lists containing this project
- awesome - ogham/dog - A command-line DNS client. (Rust)
- awesome-repositories - ogham/dog - A command-line DNS client. (Rust)
- awesome-cli-tui-software - ogham/dog - Command-line DNS client (<a name="dns"></a>dns)
- awesome-list - dog - line DNS client. | ogham | 3278 | (Rust)
- awesomeness - dog - dog is a command-line DNS client, like dig with more colors and json. (Productivity / Kubernetes)
- awesome-alternatives-in-rust - dog - A command-line DNS client. (Applications / System tools)
- awesome-cli - dog - Command-line DNS client alternative to `dig`. (Lovely Commands)
- awesome-hacking-lists - ogham/dog - A command-line DNS client. (Rust)
- my-awesome - ogham/dog - line,dns,rust pushed_at:2024-05 star:6.2k fork:0.2k A command-line DNS client. (Rust)
- awesome-offensive-rust - Dog - A command-line DNS client written in rust. Dig alternative. (Projects)
- awesome-starred - ogham/dog - A command-line DNS client. (rust)
- jimsghstars - ogham/dog - A command-line DNS client. (Rust)
README
![A screenshot of dog making a DNS request](dog-screenshot.png)
---
Dogs _can_ look up!
**dog** is a command-line DNS client, like `dig`.
It has colourful output, understands normal command-line argument syntax, supports the DNS-over-TLS and DNS-over-HTTPS protocols, and can emit JSON.## Examples
dog example.net Query a domain using default settings
dog example.net MX ...looking up MX records instead
dog example.net MX @1.1.1.1 ...using a specific nameserver instead
dog example.net MX @1.1.1.1 -T ...using TCP rather than UDP
dog -q example.net -t MX -n 1.1.1.1 -T As above, but using explicit arguments---
## Command-line options
### Query options
Human-readable host names, nameservers, types, or classes
-q, --query=HOST Host name or domain name to query
-t, --type=TYPE Type of the DNS record being queried (A, MX, NS...)
-n, --nameserver=ADDR Address of the nameserver to send packets to
--class=CLASS Network class of the DNS record being queried (IN, CH, HS)### Sending options
--edns=SETTING Whether to OPT in to EDNS (disable, hide, show)
--txid=NUMBER Set the transaction ID to a specific value
-Z=TWEAKS Set uncommon protocol-level tweaks### Protocol options
-U, --udp Use the DNS protocol over UDP
-T, --tcp Use the DNS protocol over TCP
-S, --tls Use the DNS-over-TLS protocol
-H, --https Use the DNS-over-HTTPS protocol### Output options
-1, --short Short mode: display nothing but the first result
-J, --json Display the output as JSON
--color, --colour=WHEN When to colourise the output (always, automatic, never)
--seconds Do not format durations, display them as seconds
--time Print how long the response took to arrive---
## Installation
To install dog, you can download a pre-compiled binary, or you can compile it from source. You _may_ be able to install dog using your OS’s package manager, depending on your platform.
### Packages
- For Arch Linux, install the [`dog`](https://www.archlinux.org/packages/community/x86_64/dog/) package.
- For Homebrew on macOS, install the [`dog`](https://formulae.brew.sh/formula/dog) formula.
- For NixOS, install the [`dogdns`](https://search.nixos.org/packages?channel=unstable&show=dogdns&query=dogdns) package.### Downloads
Binary downloads of dog are available from [the releases section on GitHub](https://github.com/ogham/dog/releases/) for 64-bit Windows, macOS, and Linux targets. They contain the compiled executable, the manual page, and shell completions.
### Compilation
dog is written in [Rust](https://www.rust-lang.org).
You will need rustc version [1.45.0](https://blog.rust-lang.org/2020/07/16/Rust-1.45.0.html) or higher.
The recommended way to install Rust for development is from the [official download page](https://www.rust-lang.org/tools/install), using rustup.To build, download the source code and run:
$ cargo build
$ cargo test- The [just](https://github.com/casey/just) command runner can be used to run some helpful development commands, in a manner similar to `make`.
Run `just --list` to get an overview of what’s available.- If you are compiling a copy for yourself, be sure to run `cargo build --release` or `just build-release` to benefit from release-mode optimisations.
Copy the resulting binary, which will be in the `target/release` directory, into a folder in your `$PATH`.
`/usr/local/bin` is usually a good choice.- To compile and install the manual pages, you will need [pandoc](https://pandoc.org/).
The `just man` command will compile the Markdown into manual pages, which it will place in the `target/man` directory.
To use them, copy them into a directory that `man` will read.
`/usr/local/share/man` is usually a good choice.### Container image
To build the container image of dog, you can use Docker or Kaniko. Here an example using Docker:
$ docker build -t dog .
You can then run it using the following command:
$ docker run -it --rm dog
To run dog directly, you can then define the following alias:
$ alias dog="docker run -it --rm dog"
### End-to-end testing
dog has an integration test suite written as [Specsheet](https://specsheet.software/) check documents.
If you have a copy installed, you can run:$ just xtests
Specsheet will test the compiled binary by making DNS requests over the network, checking that dog returns the correct results and does not crash.
Note that this will expose your IP address.
For more information, read [the xtests README](xtests/README.md).### Feature toggles
dog has three Cargo features that can be switched off to remove functionality.
While doing so makes dog less useful, it results in a smaller binary that takes less time to build.There are three feature toggles available, all of which are active by default:
- `with_idna`, which enables [IDNA](https://en.wikipedia.org/wiki/Internationalized_domain_name) processing
- `with_tls`, which enables DNS-over-TLS
- `with_https`, which enables DNS-over-HTTPS (requires `with_tls`)Use `cargo` to build a binary that uses feature toggles. For example, to disable TLS and HTTPS support but keep IDNA support enabled, you can run:
$ cargo build --no-default-features --features=with_idna
The list of features that have been disabled can be checked at runtime as part of the `--version` string.
---
## Documentation
For documentation on how to use dog, see the website:
## See also
`mutt`, `tail`, `sleep`, `roff`
## Licence
dog’s source code is licenced under the [European Union Public Licence](https://choosealicense.com/licenses/eupl-1.2/).