{"id":22503742,"url":"https://github.com/taketo1113/ddig","last_synced_at":"2025-08-14T17:32:44.312Z","repository":{"id":227988531,"uuid":"744412611","full_name":"taketo1113/ddig","owner":"taketo1113","description":"DNS lookup utility for Ruby","archived":false,"fork":false,"pushed_at":"2024-08-03T06:44:49.000Z","size":65,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2024-12-13T00:31:59.073Z","etag":null,"topics":["ddr","dns","doh","dot","ruby"],"latest_commit_sha":null,"homepage":"","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/taketo1113.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-01-17T08:48:58.000Z","updated_at":"2024-10-25T09:13:35.000Z","dependencies_parsed_at":"2024-05-13T14:48:15.039Z","dependency_job_id":"bc1311b7-28cd-4f20-a2f4-47785da6b46d","html_url":"https://github.com/taketo1113/ddig","commit_stats":null,"previous_names":["taketo1113/ddig"],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/taketo1113%2Fddig","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/taketo1113%2Fddig/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/taketo1113%2Fddig/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/taketo1113%2Fddig/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/taketo1113","download_url":"https://codeload.github.com/taketo1113/ddig/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":229851624,"owners_count":18134254,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ddr","dns","doh","dot","ruby"],"created_at":"2024-12-06T23:49:50.113Z","updated_at":"2024-12-15T17:28:57.060Z","avatar_url":"https://github.com/taketo1113.png","language":"Ruby","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ddig\n\nddig is DNS lookup utility for Ruby.\n\n## Features\n\n- DNS Resolvers\n  - UDP (Do53)\n  - DoT (DNS over TLS)\n    - https://www.rfc-editor.org/rfc/rfc7858.html\n  - DoH (DNS over HTTPS)\n    - Support only HTTP/1.1\n    - https://www.rfc-editor.org/rfc/rfc8484.html\n  - ~~DoQ (DNS over QUIC)~~\n    - Not Supported\n    - https://www.rfc-editor.org/rfc/rfc9250.html\n- DDR (Discovery of Designated Resolvers)\n  - https://www.rfc-editor.org/rfc/rfc9462.html\n\n## Installation\n\nInstall the gem and add to the application's Gemfile by executing:\n\n    $ bundle add ddig\n\nIf bundler is not being used to manage dependencies, install the gem by executing:\n\n    $ gem install ddig\n\n## Usage\n### Ruby\n\n```ruby\nddig = Ddig.lookup('dns.google', nameservers: ['8.8.8.8', '2001:4860:4860::8888'])\n\nddig[:do53][:ipv4]\n=\u003e #\u003cDdig::Resolver::Do53:0x00000001207aaeb0 @a=[\"8.8.4.4\", \"8.8.8.8\"], @aaaa=[\"2001:4860:4860::8844\", \"2001:4860:4860::8888\"], @hostname=\"dns.google\", @ip=:ipv4, @nameservers=[\"8.8.8.8\"]\u003e\nddig[:do53][:ipv6]\n=\u003e #\u003cDdig::Resolver::Do53:0x000000012073d2c0 @a=[\"8.8.4.4\", \"8.8.8.8\"], @aaaa=[\"2001:4860:4860::8844\", \"2001:4860:4860::8888\"], @hostname=\"dns.google\", @ip=:ipv4, @nameservers=[\"2001:4860:4860::8888\"]\u003e\n\nddig[:ddr]\n=\u003e [#\u003cDdig::Ddr::DesignatedResolver:0x0000000120735480\n    @address=\"8.8.8.8\",\n    @dohpath=nil,\n    @ip=:ipv4,\n    @port=853,\n    @protocol=\"dot\",\n    @target=\"dns.google\",\n    @unencrypted_resolver=\"8.8.8.8\",\n    @verify_cert=\n     #\u003cDdig::Ddr::VerifyCert:0x00000001207321e0\n      @address=\"8.8.8.8\",\n      @hostname=\"dns.google\",\n      @open_timeout=3,\n      @port=853,\n      @subject_alt_name=\n       [\"DNS:dns.google\",\n        \"IP Address:8.8.8.8\",\n        \"IP Address:2001:4860:4860:0:0:0:0:8888\",\n\t\t...\n        \"IP Address:2001:4860:4860:0:0:0:0:64\"],\n      @unencrypted_resolver=\"8.8.8.8\",\n      @verify=true\u003e\u003e,\n   #\u003cDdig::Ddr::DesignatedResolver:0x0000000120733b30\n    @address=\"8.8.8.8\",\n    @dohpath=\"/dns-query{?dns}\",\n    @ip=:ipv4,\n    @port=443,\n    @protocol=\"h2\",\n    @target=\"dns.google\",\n    @unencrypted_resolver=\"8.8.8.8\",\n    @verify_cert=\n     #\u003cDdig::Ddr::VerifyCert:0x0000000120451bd8\n      @address=\"8.8.8.8\",\n      @hostname=\"dns.google\",\n      @open_timeout=3,\n      @port=443,\n      @subject_alt_name=\n       [\"DNS:dns.google\",\n        \"IP Address:8.8.8.8\",\n        \"IP Address:2001:4860:4860:0:0:0:0:8888\",\n\t\t...\n        \"IP Address:2001:4860:4860:0:0:0:0:64\"],\n      @unencrypted_resolver=\"8.8.8.8\",\n      @verify=true\u003e\u003e,\n   ...\n]\n```\n\n- Do53\n```ruby\ndo53 = Ddig::Resolver::Do53.new(hostname: 'dns.google', nameservers: '8.8.8.8').lookup\n=\u003e #\u003cDdig::Resolver::Do53:0x0000000121717b78 @a=[\"8.8.8.8\", \"8.8.4.4\"], @aaaa=[\"2001:4860:4860::8844\", \"2001:4860:4860::8888\"], @hostname=\"dns.google\", @ip=nil, @nameserver=#\u003cDdig::Nameserver:0x00000001211fb108 @nameservers=\"8.8.8.8\", @servers=[\"8.8.8.8\"]\u003e, @nameservers=[\"8.8.8.8\"]\u003e\n\ndo53.a\n=\u003e [\"8.8.4.4\", \"8.8.8.8\"]\ndo53.aaaa\n=\u003e [\"2001:4860:4860::8844\", \"2001:4860:4860::8888\"]\n```\n\n- DoT\n```ruby\ndot = Ddig::Resolver::Dot.new(hostname: 'dns.google', server: '8.8.8.8').lookup\n=\u003e #\u003cDdig::Resolver::Dot:0x000000012145da90 @a=[\"8.8.8.8\", \"8.8.4.4\"], @aaaa=[\"2001:4860:4860::8844\", \"2001:4860:4860::8888\"], @hostname=\"dns.google\", @open_timeout=3, @port=853, @server=\"8.8.8.8\", @server_name=nil\u003e\n\ndot.a\n=\u003e [\"8.8.4.4\", \"8.8.8.8\"]\ndot.aaaa\n=\u003e [\"2001:4860:4860::8844\", \"2001:4860:4860::8888\"]\n```\n\n- DoH (HTTP/1.1)\n```ruby\ndoh = Ddig::Resolver::DohH1.new(hostname: 'dns.google', server: 'dns.google', dohpath: '/dns-query{?dns}').lookup\n=\u003e #\u003cDdig::Resolver::DohH1:0x00000001023ed020 @a=[\"8.8.4.4\", \"8.8.8.8\"], @aaaa=[\"2001:4860:4860::8888\", \"2001:4860:4860::8844\"], @address=nil, @dohpath=\"/dns-query{?dns}\", @hostname=\"dns.google\", @open_timeout=10, @port=443, @server=\"dns.google\"\u003e\n\ndoh.a\n=\u003e [\"8.8.4.4\", \"8.8.8.8\"]\ndoh.aaaa\n=\u003e [\"2001:4860:4860::8844\", \"2001:4860:4860::8888\"]\n```\n\n### CLI\n- Usage\n```\n$ ddig --help\nUsage: ddig [options] hostname\n    -d, --dns-type={all|do53|dot}    resolve type (default: all)\n        --udp                        use resolve type of udp(do53)\n        --dot                        use resolve type of dot\n        --doh-h1                     use resolve type of doh (http/1.1)\n        --doh-path=doh-path          doh service path\n        --ddr                        discover designated resolvers via ddr (discovery of designated resolvers)\n    -4, --ipv4                       use IPv4 query transport only\n    -6, --ipv6                       use IPv6 query transport only\n    -@ipaddress|doh-hostname,        nameserver\n        --nameserver\n    -p, --port=port                  port\n        --format={text|json}         output format (default: text)\n\n    -v, --verbose                    run verbosely\n    -h, --help                       show this help message.\n        --version                    show version.\n```\n\n```sh\n$ ddig --nameserver 8.8.8.8 dns.google\n# Do53 (IPv4)\ndns.google\tA\t8.8.4.4\ndns.google\tA\t8.8.8.8\ndns.google\tAAAA\t2001:4860:4860::8844\ndns.google\tAAAA\t2001:4860:4860::8888\n\n# SERVER: 8.8.8.8\n\n# DDR\n## DDR (#0) - dot: dns.google:853 (8.8.4.4),\tunencrypted_resolver: 8.8.8.8, \tverify cert: true\ndns.google\tA\t8.8.4.4\ndns.google\tA\t8.8.8.8\ndns.google\tAAAA\t2001:4860:4860::8844\ndns.google\tAAAA\t2001:4860:4860::8888\n\n# SERVER(Address): 8.8.4.4\n# PORT: 853\n\n...\n\n# SERVER(Address): 2001:4860:4860::8888\n# PORT: 853\n\n## DDR (#6) - h2: dns.google:443 (2001:4860:4860::8888),\tpath: /dns-query{?dns},\tunencrypted_resolver: 8.8.8.8, \tverify cert: true\ndns.google\tA\t8.8.8.8\ndns.google\tA\t8.8.4.4\ndns.google\tAAAA\t2001:4860:4860::8844\ndns.google\tAAAA\t2001:4860:4860::8888\n\n# SERVER(Hostname): 2001:4860:4860::8888\n# SERVER(Path): /dns-query{?dns}\n# PORT: 443\n...\n```\n\n- UDP(Do53)\n```sh\n$ ddig --udp --nameserver 8.8.8.8 dns.google\ndns.google\tA\t8.8.8.8\ndns.google\tA\t8.8.4.4\ndns.google\tAAAA\t2001:4860:4860::8844\ndns.google\tAAAA\t2001:4860:4860::8888\n\n# SERVER: 8.8.8.8\n```\n\n- DoT\n```sh\n$ ddig --dot --nameserver 8.8.8.8 dns.google\ndns.google\tA\t8.8.8.8\ndns.google\tA\t8.8.4.4\ndns.google\tAAAA\t2001:4860:4860::8888\ndns.google\tAAAA\t2001:4860:4860::8844\n\n# SERVER(Address): 8.8.8.8\n# PORT: 853\n```\n\n- DoH (HTTP/1.1)\n```sh\n$ ddig --doh-h1 --nameserver dns.google --doh-path /dns-query{?dns} dns.google\ndns.google\tA\t8.8.8.8\ndns.google\tA\t8.8.4.4\ndns.google\tAAAA\t2001:4860:4860::8888\ndns.google\tAAAA\t2001:4860:4860::8844\n\n# SERVER(Hostname): dns.google\n# SERVER(Path): /dns-query{?dns}\n# PORT: 443\n```\n\n- DDR (Discovery of Designated Resolvers)\n```sh\n$ ddig --ddr --nameserver 8.8.8.8\ndot: dns.google:853 (8.8.8.8),\tunencrypted_resolver: 8.8.8.8, \tverify cert: true\ndot: dns.google:853 (8.8.4.4),\tunencrypted_resolver: 8.8.8.8, \tverify cert: true\ndot: dns.google:853 (2001:4860:4860::8844),\tunencrypted_resolver: 8.8.8.8, \tverify cert: true\ndot: dns.google:853 (2001:4860:4860::8888),\tunencrypted_resolver: 8.8.8.8, \tverify cert: true\nh2: dns.google:443 (8.8.8.8),\tpath: /dns-query{?dns},\tunencrypted_resolver: 8.8.8.8, \tverify cert: true\nh2: dns.google:443 (8.8.4.4),\tpath: /dns-query{?dns},\tunencrypted_resolver: 8.8.8.8, \tverify cert: true\nh2: dns.google:443 (2001:4860:4860::8844),\tpath: /dns-query{?dns},\tunencrypted_resolver: 8.8.8.8, \tverify cert: true\nh2: dns.google:443 (2001:4860:4860::8888),\tpath: /dns-query{?dns},\tunencrypted_resolver: 8.8.8.8, \tverify cert: true\nh3: dns.google:443 (8.8.4.4),\tpath: /dns-query{?dns},\tunencrypted_resolver: 8.8.8.8, \tverify cert: true\nh3: dns.google:443 (8.8.8.8),\tpath: /dns-query{?dns},\tunencrypted_resolver: 8.8.8.8, \tverify cert: true\nh3: dns.google:443 (2001:4860:4860::8888),\tpath: /dns-query{?dns},\tunencrypted_resolver: 8.8.8.8, \tverify cert: true\nh3: dns.google:443 (2001:4860:4860::8844),\tpath: /dns-query{?dns},\tunencrypted_resolver: 8.8.8.8, \tverify cert: true\n\n# SERVER: 8.8.8.8\n```\n\n## Development\n\nAfter checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.\n\nTo install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and the created tag, and push the `.gem` file to [rubygems.org](https://rubygems.org).\n\n## Contributing\n\nBug reports and pull requests are welcome on GitHub at https://github.com/taketo1113/ddig.\n\n## License\n\nThe gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftaketo1113%2Fddig","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftaketo1113%2Fddig","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftaketo1113%2Fddig/lists"}