dog is a command-line DNS client, like dig.

Overview

dog

dog is a command-line DNS client.

Build status Say thanks!

A screenshot of dog making a DNS request


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 package.
  • For Homebrew on macOS, install the dog formula.

Downloads

Binary downloads of dog are available from the releases section on GitHub 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. You will need rustc version 1.45.0 or higher. The recommended way to install Rust for development is from the official download page, using rustup.

To build, download the source code and run:

$ cargo build
$ cargo test
  • The 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. 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 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.

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 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: https://dns.lookup.dog/

See also

mutt, tail, sleep, roff

Licence

dog’s source code is licenced under the European Union Public Licence.

Comments
  • Consider changing default set of records

    Consider changing default set of records

    I really like this tool! However, one convenience feature that I'm missing is "Just show me commonly useful information about this domain". I know that with dig and drill you can use ANY but that's not quite what I want in most cases. Frankly, I'd be happy about ALL or --all or something like that which showed the equivalent of dog example.net A AAAA NS MX TXT SOA CNAME. Personally, I'd even like that by default.

    For instance, nowadays you at least have A and AAAA entries and dog by default only shows A which I don't think is very "modern" as a default. I know that other tools have the same default but in my understanding, dog is supposed to be convenient, too.

    opened by svenstaro 8
  • Always getting connection refused, no matter what I query

    Always getting connection refused, no matter what I query

    On my system, no matter what I query, I always get:

    dog example.net
    Error [network]: Connection refused (os error 111)
    
    dog google.com
    Error [network]: Connection refused (os error 111)
    
    $ dog --version 
    dog ● command-line DNS client
    v0.1.0
    https://dns.lookup.dog/
    

    I'm on Arch Linux. My network is actually fairly simple. I use systemd-resolved for my usual DNS. drill and dig are perfectly happy performing the queries.

    $ resolvectl
    Global
           LLMNR setting: yes                 
    MulticastDNS setting: yes                 
      DNSOverTLS setting: no                  
          DNSSEC setting: no                  
        DNSSEC supported: no                  
      Current DNS Server: 127.0.0.1           
             DNS Servers: 127.0.0.1           
    Fallback DNS Servers: 1.1.1.1             
                          9.9.9.10            
                          8.8.8.8             
                          2606:4700:4700::1111
                          2620:fe::10         
                          2001:4860:4860::8888
    
    Link 2 (enp67s0)
          Current Scopes: none
    DefaultRoute setting: no  
           LLMNR setting: yes 
    MulticastDNS setting: no  
      DNSOverTLS setting: no  
          DNSSEC setting: no  
        DNSSEC supported: no  
    
    Link 3 (br0)
          Current Scopes: DNS LLMNR/IPv4 LLMNR/IPv6
    DefaultRoute setting: yes                      
           LLMNR setting: yes                      
    MulticastDNS setting: no                       
      DNSOverTLS setting: no                       
          DNSSEC setting: no                       
        DNSSEC supported: no                       
      Current DNS Server: 10.13.37.1               
             DNS Servers: 10.13.37.1               
                          fd00::3681:c4ff:fee4:7801
    
    Link 4 (docker0)
          Current Scopes: none
    DefaultRoute setting: no  
           LLMNR setting: yes 
    MulticastDNS setting: no  
      DNSOverTLS setting: no  
          DNSSEC setting: no  
        DNSSEC supported: no  
    
    Link 5 (br-b1c82fd2937d)
          Current Scopes: none
    DefaultRoute setting: no  
           LLMNR setting: yes 
    MulticastDNS setting: no  
      DNSOverTLS setting: no  
          DNSSEC setting: no  
        DNSSEC supported: no  
    
    opened by svenstaro 8
  • [Windows] Prints ANSI codes instead of colored text

    [Windows] Prints ANSI codes instead of colored text

    • dog version: 0.1.0 (Downloaded prebuilt binary from https://github.com/ogham/dog/releases/tag/v0.1.0 )
    • OS: Windows 10 (Microsoft Windows [Version 10.0.19042.572])

    Maybe need to call enable_ansi_support function somewhere...?

    image

    opened by gaeulbyul 5
  • installing via homebrew on ubuntu 20.04 fails

    installing via homebrew on ubuntu 20.04 fails

    Not sure if this is something that you might fix or if this is an issue with homebrew somehow, but trying to install dog via homebrew: brew install dog on ubuntu 20.04, getting this error:

    ==> Downloading https://github.com/ogham/dog/archive/v0.1.0.tar.gz
    Already downloaded: /home/pavel/.cache/Homebrew/downloads/e9869860b4b74bd1955a7e4be363a6bbd20d683ca8b4cf4942938e6567865c15--dog-0.1.0.tar.gz
    ==> cargo install
    Last 15 lines from /home/pavel/.cache/Homebrew/Logs/dog/01.cargo:
      If you're in a situation where you think the directory *should* be found
      automatically, please open a bug at https://github.com/sfackler/rust-openssl
      and include information about your system as well as this message.
    
      $HOST = x86_64-unknown-linux-gnu
      $TARGET = x86_64-unknown-linux-gnu
      openssl-sys = 0.9.58
    
      ', /home/pavel/.cache/Homebrew/cargo_cache/registry/src/github.com-1ecc6299db9ec823/openssl-sys-0.9.58/build/find_normal.rs:157:5
      note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
    warning: build failed, waiting for other jobs to finish...
    error: failed to compile `dog v0.1.0 (/tmp/dog-20201110-1700102-b2dqt0/dog-0.1.0)`, intermediate artifacts can be found at `/tmp/dog-20201110-1700102-b2dqt0/dog-0.1.0/target`
    
    Caused by:
      build failed
    
    READ THIS: https://docs.brew.sh/Troubleshooting
    
    opened by sagor999 4
  • Support querying unknown types

    Support querying unknown types

    Cool project!

    It would be great if the --type parameter enabled the user to query types that dog doesn't know about.

    RFC3597 section 5 describes a conventional text representation for unknown (and optionally known) RR types:

       In the "type" field of a master file line, an unknown RR type is
       represented by the word "TYPE" immediately followed by the decimal RR
       type number, with no intervening whitespace.
    

    For example, --type=TYPE28 would be equivalent to --type=AAAA.

    I'd contribute a patch, but unfortunately my hands are tied due to the license.

    opened by dmcardle 3
  • Homebrew formula

    Homebrew formula

    Hi @ogham 👋

    Thanks for building this neat utility. 👍

    I've created a Homebrew formula for dog but until it passes 75 stars it can't be submitted to the default formulae. Once that happens feel free to ping me or submit my work directly. In the meantime, you can test it using the following command:

    brew install vladimyr/vladimyr/dog
    

    Formula source → https://github.com/vladimyr/homebrew-vladimyr/blob/aa8e7e1/Formula/dog.rb

    opened by vladimyr 3
  • Allow _ in domain names

    Allow _ in domain names

    While using dog locally to check some specific DKIM records, I realised that the _ was not recognised as a valid character in a domain name.

    $ dog default._domainkey.barrobes.com TXT
    dog: Invalid options: Invalid domain "default._domainkey.barrobes.com"
    

    After the change:

    $ cargo run -q default._domainkey.barrobes.com TXT
    TXT default._domainkey.barrobes.com. 1h53m30s   "v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwOHVlAPSLPIbBSuXThuNq+d4OXI9A3Gln10RRN1c5ZIyrXkPReqAuBVp+/IFXHJdyCXPCmF/aAfs1Iiu3oXzVSPIOZIpVEfEIBazs2RHvnWFCJWom+O6tbWRmKAyacVZQfEhrdA8LPzCjSEXRs4wUClyQuOvDU1qOik5CAbsTYcL60eahdId+xiZFlDfrFf/OIdsR/diX91ur3hUBbO4H7Iue3DXBqgmAIvmi57DibqTbwOz+UXF7Bqoxe0pFlljQi18UV9Ck7mASq7qDAmMqQwqMJ24XPvKCiw2KLBWOrSqBXzzBinZTS/9WlkDFXcBH1ewyIpWixQeXcZjq7oMQwIDAQAB;"
    

    It still works with IDNA domains:

    $ cargo run -q österreich.icom.museum
    CNAME xn--sterreich-z7a.icom.museum. 9m29s   "redirections.icom.museum."
        A redirections.icom.museum.      9m29s   81.201.190.55
    $ cargo run -q беларусь.icom.museum
    CNAME xn--80abmy0agn7e.icom.museum. 10m00s   "redirections.icom.museum."
        A redirections.icom.museum.      9m59s   81.201.190.55
    

    Possibly this fix is not the right/full solution, but it's a way to keep the ball rolling. I didn't want to have a separate build of dog disabling IDNA just for this purpose (that might have done it). I think it should be possible to support IDNA and still allow for underscores.

    Open to any suggestions, and happy to add tests.

    opened by txels 2
  • Allow different tls implementations with cargo features

    Allow different tls implementations with cargo features

    This is a first try to fix #53 and #21

    It uses different features to allow the user to choose a tls implementation. For example, all of the following work:

    cargo build # Will use with_tls+with_https using nativetls
    
    cargo build --all-features # Will compile with with_tls+with_https+with_nativetls+withrustls but it will use nativetls
    
    cargo build --no-default-features --features with_tls,with_https,with_rustls # will use rustls
    
    cargo build --no-default-features --features with_tls,with_https,with_nativetls_vendored # will use nativetls_vendored
    

    When using rustls or nativetls_vendored, we can compile dog using musl:

    cargo build --target x86_64-unknown-linux-musl --no-default-features --features with_tls,with_https,with_nativetls_vendored
    

    --features with_tls,with_rustls is supported currently, but maybe we should not support this combination at the moment, because of https://github.com/ctz/rustls/issues/281 https://github.com/briansmith/webpki/issues/54 https://github.com/ctz/rustls/issues/184 This means for this to work you'd have to use a valid dns name as a dns server:

    $ cargo run --no-default-features --features with_tls,with_rustls -- github.com -S @one.one.one.one
    A github.com. 47s   140.82.121.4
    

    With an ip address for dns server:

    $ cargo run --no-default-features --features with_tls,with_rustls -- github.com -S @1.1.1.1
    Error [tls]: InvalidDNSNameError
    

    But it works with nativetls:

    $ cargo run --no-default-features --features with_tls,with_nativetls_vendored -- github.com -S @1.1.1.1
    A github.com. 30s   140.82.121.3
    

    DNS over HTTPS works with rustls though:

    $ cargo run --no-default-features --features with_https,with_rustls -- github.com -H @https://cloudflare-dns.com/dns-query
    A github.com. 50s   140.82.121.3
    

    --all-features is supported as per https://doc.rust-lang.org/cargo/reference/features.html#mutually-exclusive-features To not complicate builds etc.

    opened by simao 2
  • Error [protocol]: Malformed packet when querying TXT records

    Error [protocol]: Malformed packet when querying TXT records

    dog v0.1.0 Windows 10 2004

    When quering some domains for TXT records, dog only responds with Malformed packet:

    dog gp.se TXT
    Error [protocol]: Malformed packet: length 351 was specified, but read 7 bytes
    
    dog svt.se TXT
    Error [protocol]: Malformed packet: length 301 was specified, but read 237 bytes
    
    dog kungalv.se TXT
    Error [protocol]: Malformed packet: length 378 was specified, but read 172 bytes
    
    dog kungalv.se TXT @1.1.1.1
    Error [protocol]: Malformed packet: length 378 was specified, but read 172 bytes
    
    dog kungalv.se TXT @8.8.8.8
    Error [protocol]: Malformed packet: length 378 was specified, but read 172 bytes
    

    Although most other domains I've tested works fine, for example

    dog one.se TXT
    TXT one.se. 30m00s   "v=spf1 redirect=_spf.one.se"
    

    and other types of records seems to be no issue:

    dog kungalv.se MX
    MX kungalv.se.                             59m51s   10 "kungalv-se.mail.protection.outlook.com."
     A kungalv-se.mail.protection.outlook.com.     1s + 104.47.0.36
     A kungalv-se.mail.protection.outlook.com.     1s + 104.47.1.36
    
    X › duplicate 
    opened by tjoanp 2
  • Add CLI option to increase output verbosity

    Add CLI option to increase output verbosity

    This change will add a CLI option -v to increase output verbosity which can be used as an alternative to providing the DOG_DEBUG environment variable. You can specify one or more flags to increase the logging level:

    Eg.

    dog -v google.com    # Debug level
    dog -vv google.com   # Trace level
    

    The previous short flag for version was moved to -V leaving the long flag --version as-is.

    The usage looks like this:

      -V, --version            Print version information
      -v                       Increase verbosity by adding multiple (-vv)
    

    The cli arguments will override the DOG_DEBUG environment variable.

    opened by veloxl 2
  • Separate result between nameserver

    Separate result between nameserver

    I have a python script called digs that do multiple dig on specified nameservers.

    Today I am trying dog, and I love its ability to accept multiple nameservers.

    ~
    ❯ dog example.com MX -n 1.1.1.1 -n 8.8.8.8
    MX example.com.  23h57m48s   0 ""
    MX example.com. 1d0h00m00s   0 ""
    

    However I can't point which is wich. What if dog have a separator between them if we supply multiple nameservers ?

    ~
    ❯ dog example.com MX -n 1.1.1.1 -n 8.8.8.8 -n x.x.x.x
    [1.1.1.1]
    MX example.com.  23h57m48s   0 ""
    [8.8.8.8]
    MX example.com. 1d0h00m00s   0 ""
    [x.x.x.x]
    MX example.com. 1d0h00m00s   0 ""
    

    My current workaround is to use JSON output and filter the result:

    dog on  master is 📦 v0.1.0 via 🦀 v1.48.0
    ❯ cargo r --  example.com MX -n 1.1.1.1 -n 8.8.8.8 -J |  jq .responses[0].answers[0]
        Finished dev [unoptimized + debuginfo] target(s) in 0.02s
         Running `target/debug/dog example.com MX -n 1.1.1.1 -n 8.8.8.8 -J`
    {
      "class": "IN",
      "exchange": "",
      "name": "example.com.",
      "preference": 0,
      "ttl": 86126,
      "type": "MX"
    }
    
    dog on  master is 📦 v0.1.0 via 🦀 v1.48.0
    ❯ cargo r --  example.com MX -n 1.1.1.1 -n 8.8.8.8 -J |  jq .responses[1].answers[0]
        Finished dev [unoptimized + debuginfo] target(s) in 0.03s
         Running `target/debug/dog example.com MX -n 1.1.1.1 -n 8.8.8.8 -J`
    {
      "class": "IN",
      "exchange": "",
      "name": "example.com.",
      "preference": 0,
      "ttl": 86252,
      "type": "MX"
    }
    
    opened by azzamsa 2
  • Commandline Interface on Windows 10 Problem with Output

    Commandline Interface on Windows 10 Problem with Output

    Hi,

    i download the pre-compiled Version for Windows and copy the dog.exe in c:\windows\system32 . I can start it but get a crazy output (see attached file). Is something missing oder it is a bug?

    Version v0.1.0 Operating System Windows 10

    Screenshot

    opened by AndreBX 0
  • valid TXT answer is considered invalid

    valid TXT answer is considered invalid

    Hi,

    I was told about your awesome utility and I really like it. Yesterday I noticed probably a bug, when I tried this query:

    dog 24yzjhop3iawhkuxy4b3yj36dogrbkwwz2xivaujzqzeyiwobz2a.luna.avast.com. TXT

    This query returns two TXT record, one is 53 bytes long and other exactly 255.

    The utility returns error: Error [protocol]: Malformed packet: insufficient data (latest GIT master 721440b12ef01a812abe5dc6ced69af6e221fad5) or once I got: Error [protocol]: Malformed packet: length 256 was specified, but read 257 bytes (with dog v0.1.0)

    I'm using dog on Mac OS 12.5 on Arm.

    I believe the error is associated with this piece of code:

    https://github.com/ogham/dog/blob/master/dns/src/record/txt.rs#L45

    As one of the records is exactly 255 bytes long. And there is no other piece of it. The record is persistent so you can try on your own.

    Thanks!

    opened by hanickadot 0
  • thread 'main' panicked at 'Invalid HTTPS nameserver', dns-transport/src/https.rs:55:50

    thread 'main' panicked at 'Invalid HTTPS nameserver', dns-transport/src/https.rs:55:50

    At a stable hardened Gentoo Linux I do get:

     $ RUST_BACKTRACE=full dog -H wdl1.pcfg.cache.wpscdn.com 
    thread 'main' panicked at 'Invalid HTTPS nameserver', dns-transport/src/https.rs:55:50
    stack backtrace:
       0:     0x556dec00c68e - <unknown>
       1:     0x556debfa41ac - <unknown>
       2:     0x556debfe70f7 - <unknown>
       3:     0x556dec00d3e0 - <unknown>
       4:     0x556dec00dc65 - <unknown>
       5:     0x556dec00d762 - <unknown>
       6:     0x556dec00d6d6 - <unknown>
       7:     0x556dec00d692 - <unknown>
       8:     0x556debf9e1a2 - <unknown>
       9:     0x556debfa42f0 - <unknown>
      10:     0x556debfa429b - <unknown>
      11:     0x556debf9e386 - <unknown>
      12:     0x556debfb7f47 - <unknown>
      13:     0x556debfd1364 - <unknown>
      14:     0x556debfcfffb - <unknown>
      15:     0x556debfd3533 - <unknown>
      16:     0x556debfc8979 - <unknown>
      17:     0x556dec00b6a6 - <unknown>
      18:     0x556debfcf944 - <unknown>
      19:     0x7f0b6e67e31c - __libc_start_call_main
                                   at /var/tmp/portage/sys-libs/glibc-2.34-r13/work/glibc-2.34/csu/../sysdeps/nptl/libc_start_call_main.h:58:16
      20:     0x7f0b6e67e3cc - __libc_start_main_impl
                                   at /var/tmp/portage/sys-libs/glibc-2.34-r13/work/glibc-2.34/csu/../csu/libc-start.c:392:3
      21:     0x556debfa0181 - <unknown>
      22:                0x0 - <unknown>
    Aborted
    
    opened by toralf 0
  • arm64 release

    arm64 release

    It would be great to have a pre-compiled version of dog in your GitHub releases for the arm64 architecture (Raspberry Pi, etc.) Bonus would be to add it to the Debian and Ubuntu repositories for apt installation.

    opened by mrbluecoat 1
  • Why are there large time differences between dig and dog?

    Why are there large time differences between dig and dog?

    Cross posting from here: https://github.com/cleanbrowsing/dnsperftest/issues/74

    Apologies - I wasn't able to locate an answer using google or stackoverflow.

    Why is there a large time difference caused when substituting the dig command for the dog command? Is there an overhead in dig thats bypassed in dog?

    To replicate, replace:

    ttime=`$dig +tries=1 +time=2 +stats @$pip $d |grep "Query time:" | cut -d : -f 2- | cut -d " " -f 2`
    

    with

    ttime=`$dog $d @$pip --time | grep "Ran in" | cut -c 8-15 | cut -d "m" -f 1`
    

    also add the following at the top of the file after ~line 5/6

    
    { command -v drill > /dev/null && dog=drill; } || { command -v dog > /dev/null && dog=dog; } || { echo "error: dog was not found. Please install dog."; exit 1; }
    

    As an example - here are my DNS perfs (i amended so you can see which domain its hitting)

    With DIG (DiG 9.10.6)

                         www.go  amazon  facebo  carous  www.re  wikipe  twitte  gmail.  instag  whatsa  Average 
    192.168.1.37         57 ms   49 ms   50 ms   1000 ms 55 ms   56 ms   53 ms   50 ms   50 ms   49 ms     146.90
    192.168.1.1          50 ms   50 ms   49 ms   50 ms   49 ms   50 ms   50 ms   1000 ms 58 ms   54 ms     146.00
    cloudflare           54 ms   54 ms   50 ms   49 ms   51 ms   53 ms   53 ms   52 ms   52 ms   53 ms     52.10
    level3               1000 ms 62 ms   53 ms   49 ms   51 ms   172 ms  49 ms   50 ms   50 ms   50 ms     158.60
    google               52 ms   51 ms   50 ms   49 ms   49 ms   52 ms   49 ms   51 ms   51 ms   50 ms     50.40
    quad9                50 ms   53 ms   50 ms   49 ms   53 ms   50 ms   53 ms   49 ms   51 ms   50 ms     50.80
    freenom              51 ms   51 ms   49 ms   51 ms   49 ms   50 ms   50 ms   49 ms   1000 ms 58 ms     145.80
    opendns              52 ms   49 ms   53 ms   49 ms   54 ms   53 ms   52 ms   49 ms   51 ms   50 ms     51.20
    norton               51 ms   1000 ms 56 ms   51 ms   50 ms   52 ms   52 ms   50 ms   49 ms   52 ms     146.30
    cleanbrowsing        49 ms   53 ms   55 ms   50 ms   1000 ms 57 ms   50 ms   49 ms   50 ms   49 ms     146.20
    yandex               50 ms   52 ms   52 ms   50 ms   49 ms   54 ms   49 ms   51 ms   51 ms   51 ms     50.90
    adguard              50 ms   51 ms   50 ms   53 ms   50 ms   49 ms   49 ms   49 ms   49 ms   50 ms     50.00
    neustar              51 ms   51 ms   51 ms   51 ms   51 ms   56 ms   53 ms   53 ms   51 ms   50 ms     51.80
    comodo               50 ms   54 ms   54 ms   53 ms   54 ms   53 ms   53 ms   52 ms   50 ms   49 ms     52.20
    nextdns              51 ms   51 ms   53 ms   53 ms   54 ms   53 ms   1000 ms 56 ms   49 ms   50 ms     147.00
    

    vs with DOG (Dog -v v0.1.0)

    192.168.1.37         15 ms   5 ms    6 ms    12 ms   5 ms    23 ms   7 ms    16 ms   5 ms    5 ms      9.90
    192.168.1.1          7 ms    9 ms    5 ms    5 ms    5 ms    5 ms    17 ms   7 ms    4 ms    5 ms      6.90
    ...others similar
    
    
    opened by mdav43 0
  • MacOS keychain trust not as expected

    MacOS keychain trust not as expected

    I had some issue with certificates on my home DNS today, and thought I'd use dog to debug. I'm using version 0.1.0.

    $  dog --version                                                                                    
    dog ● command-line DNS client
    v0.1.0
    https://dns.lookup.dog/
    

    My scenario was that the TLS certificates had expired, and I caught that fairly quickly. Renewed the certs and got them in place. Then tried to validate with dog and it helped me identify the next issue, which was that I only updated one of the pair of servers. After updating that, I hoped for dog to confirm I had the fix, but still wasn't quite there.

    Trying to verify the fix, I turned again to dog and was disappointed:

    $ dog www.google.com --tls                 
    Error [tls]: The certificate was not trusted.
    

    Dug in a bit to see what might be up, and thought maybe it was because Mac didn't trust the roots. That wasn't the case, they're all set.

    trusted-roots

    Tried to present the intermediate with the cert…CoreDNS doesn't let me do that so I was out of luck. So I made sure my Mac trusted the intermediate

    intermediate-trust

    Tried again and still no luck

    $  dog www.google.com --tls
    Error [tls]: The certificate was not trusted.
    Error [tls]: The certificate was not trusted.
    

    I switched over to kdig for a sanity check, and it seems to be reading my trust settings correctly.

    $  kdig www.google.com +tls                                                                         
    ;; TLS session (TLS1.3)-(ECDHE-X25519)-(ECDSA-SECP384R1-SHA384)-(CHACHA20-POLY1305)
    ;; ->>HEADER<<- opcode: QUERY; status: NOERROR; id: 5743
    ;; Flags: qr rd ra; QUERY: 1; ANSWER: 1; AUTHORITY: 0; ADDITIONAL: 1
    
    ;; EDNS PSEUDOSECTION:
    ;; Version: 0; flags: ; UDP size: 4096 B; ext-rcode: NOERROR
    ;; PADDING: 81 B
    
    ;; QUESTION SECTION:
    ;; www.google.com.     		IN	A
    
    ;; ANSWER SECTION:
    www.google.com.     	30	IN	A	142.250.64.100
    
    ;; Received 158 B
    ;; Time 2022-05-09 13:21:14 EDT
    ;; From [email protected](TCP) in 37.0 ms
    

    I'm running on MacOS Monterrey, v 12.3.1, and here's the details from uname.

    $  uname -a                                                                                         
    Darwin OS-C02F22SVML85 21.4.0 Darwin Kernel Version 21.4.0: Fri Mar 18 00:45:05 PDT 2022; root:xnu-8020.101.4~15/RELEASE_X86_64 x86_64
    
    opened by crdant 1
Releases(v0.1.0)
A command line tool that builds and (re)starts your web application everytime you save a Go or template fileA command line tool that builds and (re)starts your web application everytime you save a Go or template file

# Fresh Fresh is a command line tool that builds and (re)starts your web application everytime you save a Go or template file. If the web framework yo

null 0 Nov 22, 2021
A command line tool to prompt for a value to be included in another command line.

readval is a command line tool which is designed for one specific purpose—to prompt for a value to be included in another command line. readval prints

Venky 0 Dec 22, 2021
A simple command line tool using which you can skip phone number based SMS verification by using a temporary phone number that acts like a proxy.

Fake-SMS A simple command line tool using which you can skip phone number based SMS verification by using a temporary phone number that acts like a pr

Narasimha Prasanna HN 726 Sep 23, 2022
Hosty is a command-line utility that allows for fast inspection and editing of /etc/hosts-like files

Hosty Description Hosty is a command-line utility that allows for fast inspection and editing of /etc/hosts-like files. It is written in golang and us

null 11 Sep 3, 2021
ls Xtended : A command line utility which lets you navigate through terminal like a pro 😎.

Navigate through terminal like a pro ?? ?? Demo • ⚗️ Installation • ?? Contribution • ❗ Known Issues ❓ Why? It's a pain to cd and ls multiple times to

Souvik 162 Aug 25, 2022
Vale is a command-line tool that brings code-like linting to prose

Vale: Your style, our editor Vale is a command-line tool that brings code-like linting to prose. It's fast, cross-platform (Windows, macOS, and Linux)

errata.ai 2.6k Sep 23, 2022
git-glimpse is a command-line tool that is aimed at generating a git prompt like the one from zsh-vcs-prompt.

Git GoGlimpse git-glimpse is a command-line tool that is aimed at generating a git prompt like the one from zsh-vcs-prompt. The particularity of this

Corentin de Boisset 0 Jan 27, 2022
Hasura-fzf - This command has a fzf-like UI that allows you to find and run the file version used by the hasura command

hasura-fzf This command has a fzf-like UI that allows you to find and run the fi

Shoki Hata 4 Jun 25, 2022
Go package to make lightweight ASCII line graph ╭┈╯ in command line apps with no other dependencies.

asciigraph Go package to make lightweight ASCII line graphs ╭┈╯. Installation go get github.com/guptarohit/asciigraph Usage Basic graph package main

Rohit Gupta 2k Sep 22, 2022
git-xargs is a command-line tool (CLI) for making updates across multiple Github repositories with a single command.

Table of contents Introduction Reference Contributing Introduction Overview git-xargs is a command-line tool (CLI) for making updates across multiple

Gruntwork 644 Sep 6, 2022
git-xargs is a command-line tool (CLI) for making updates across multiple GitHub repositories with a single command

git-xargs is a command-line tool (CLI) for making updates across multiple GitHub repositories with a single command. You give git-xargs:

Maxar Infrastructure 1 Feb 5, 2022
Package command provide simple API to create modern command-line interface

Package command Package command provide simple API to create modern command-line interface, mainly for lightweight usage, inspired by cobra Usage pack

chenen 0 Jan 16, 2022
A command line tool for simplified docker volume command built with go

dockervol A command line tool for simplified docker volume command built with go. Features: Remove anonymous volume (beta) Remove volume by matching n

Moh Achun Armando 0 Dec 18, 2021
Watcher - A simple command line app to watch files in a directory for changes and run a command when files change!

Watcher - Develop your programs easily Watcher watches all the files present in the directory it is run from of the directory that is specified while

Geet Sethi 1 Mar 27, 2022
Basic command line example using golang grpc client tools

This is a basic command line interface that demonstrates using the golang GRPC API. The API is reused between dishy and the wifi router, however both

null 37 Aug 15, 2022
Gomphotherium (/ˌɡɒmfəˈθɪəriəm/; "welded beast"), a command line Mastodon client.

Gomphotherium Gomphotherium (/ˌɡɒmfəˈθɪəriəm/; "welded beast"), a command line Mastodon client. Description Gomphotherium is a Mastodon client for the

マリウス 35 Aug 29, 2022
Canard. A command line TUI client for the journalist RSS aggregator.

Canard Canard. A command line TUI client for the Journalist RSS aggregator. Installation Download a binary from the releases page. Or build it yoursel

マリウス 94 Sep 2, 2022
A client for managing authzed or any API-compatible system from your command line.

zed A client for managing authzed or any API-compatible system from your command line. Installation zed is currently packaged by as a head-only Homebr

authzed 44 Aug 28, 2022
A simple command-line client for Clash.

Clashcli A simple command-line client for Clash. Interacts with Clash using its REST API. Select nodes for groups Run latency test for a node Help $ c

Shun Zi 1 Oct 10, 2021