{"id":28993996,"url":"https://github.com/iijlab/dnsext","last_synced_at":"2025-06-25T03:09:31.434Z","repository":{"id":60392478,"uuid":"541860184","full_name":"iijlab/dnsext","owner":"iijlab","description":"A DNS full resolver and a stub command","archived":false,"fork":false,"pushed_at":"2025-06-22T20:52:35.000Z","size":3584,"stargazers_count":64,"open_issues_count":17,"forks_count":5,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-06-22T21:31:56.014Z","etag":null,"topics":["bowline","dnssec","dug","haskell","svcb"],"latest_commit_sha":null,"homepage":"","language":"Haskell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/iijlab.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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,"zenodo":null}},"created_at":"2022-09-27T01:53:31.000Z","updated_at":"2025-06-22T20:52:06.000Z","dependencies_parsed_at":"2025-05-09T07:27:38.316Z","dependency_job_id":"88b9dad8-aab9-49f6-bb4c-0b15cc61db1e","html_url":"https://github.com/iijlab/dnsext","commit_stats":null,"previous_names":["iijlab/dnsext","kazu-yamamoto/dnsext"],"tags_count":34,"template":false,"template_full_name":null,"purl":"pkg:github/iijlab/dnsext","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iijlab%2Fdnsext","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iijlab%2Fdnsext/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iijlab%2Fdnsext/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iijlab%2Fdnsext/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/iijlab","download_url":"https://codeload.github.com/iijlab/dnsext/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iijlab%2Fdnsext/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":261795334,"owners_count":23210620,"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":["bowline","dnssec","dug","haskell","svcb"],"created_at":"2025-06-25T03:09:30.663Z","updated_at":"2025-06-25T03:09:31.424Z","avatar_url":"https://github.com/iijlab.png","language":"Haskell","funding_links":[],"categories":[],"sub_categories":[],"readme":"![GitHub Actions status](https://github.com/kazu-yamamoto/dnsext/workflows/Haskell%20CI/badge.svg)\n\n# Extensible DNS libraries written purely in Haskell\n\nThis is a new series of DNS libraries based on the experience of the [dns](https://github.com/kazu-yamamoto/dns) library in Haskell. The dns library has two flaws:\n\n- Resource records are not extensible\n- Resource records are not friendly to caching\n\nResource records are implemented as a sum type. The third party library cannot extend them. The only way to extend them is to send a pull request to the dns library.\n\nSome resource records use `ByteString` internally. So, if they are cached for a long time, fragmentation happens.\n\nThis new library uses typeclasses to extend resource records and uses `ShortByteString` in them.\n\n## `bowline`, a full resolver server\n\n`dnsext-full-resolver` provides a server of full resolver, called `bowline`.\n\n## `dug`, a stub/full resolver command\n\n`dnsext-full-resolver` also provides dig-like command called `dug`.\n\nSVBC example: if `-d auto` is specified, `dug` obtains the SVCB record first and resolves the target RR via DNS over X:\n\n```\n% dug @1.1.1.1 www.iij.ad.jp --demo -d auto +multi\n    query \"_dns.resolver.arpa.\" SVCB to 1.1.1.1#53/UDP\nRD_SVCB {\n      svcb_priority = 1\n    , svcb_target = \"one.one.one.one.\"\n    , svcb_params = {\n      alpn=[\"h2\",\"h3\"]\n    , port=443\n    , ipv4hint=[1.1.1.1,1.0.0.1]\n    , ipv6hint=[2606:4700:4700::1111,2606:4700:4700::1001]\n    , dohpath=\"/dns-query{?dns}\"}}\nRD_SVCB {\n      svcb_priority = 2\n    , svcb_target = \"one.one.one.one.\"\n    , svcb_params = {\n      alpn=[\"dot\"]\n    , port=853\n    , ipv4hint=[1.1.1.1,1.0.0.1]\n    , ipv6hint=[2606:4700:4700::1111,2606:4700:4700::1001]}}\n    query \"www.iij.ad.jp.\" A to 1.1.1.1#443/H2\n    query \"www.iij.ad.jp.\" A to 2606:4700:4700::1001#443/H2\n    query \"www.iij.ad.jp.\" A to 2606:4700:4700::1111#443/H2\n    query \"www.iij.ad.jp.\" A to 1.1.1.1#443/H2: win\n;; 1.1.1.1#443/H2, Tx:42bytes, Rx:58bytes, 140usec\n\n;; HEADER SECTION:\n;Standard query, NoError, id: 59673\n;Flags: Recursion Desired, Recursion Available\n\n\n;; OPTIONAL PSEUDO SECTION:\n;UDP: 1232, Data:[]\n\n;; QUESTION SECTION:\n;www.iij.ad.jp.\t\tIN\tA\n\n;; ANSWER SECTION:\nwww.iij.ad.jp.\t300(5 mins)\tIN\tA\t202.232.2.180\n\n;; AUTHORITY SECTION:\n\n;; ADDITIONAL SECTION:\n\n```\n\nFull resolve example: if `-i` is specified, `dug` does iterative queries using the logic of the full resolver.\n\n```\n% dug www.iij.ad.jp --demo -i\nroot-server addresses for priming: 198.41.0.4 198.97.190.53 199.7.83.42 199.7.91.13\n    query \".\" DNSKEY to 198.41.0.4#53/UDP\n    query \".\" DNSKEY to 198.97.190.53#53/UDP\n    query \".\" DNSKEY to 199.7.83.42#53/UDP\n    query \".\" DNSKEY to 199.7.91.13#53/UDP\n    query \".\" DNSKEY to 198.97.190.53#53/UDP: win\n    query \".\" NS to 198.41.0.4#53/UDP\n    query \".\" NS to 198.97.190.53#53/UDP\n    query \".\" NS to 199.7.83.42#53/UDP\n    query \".\" NS to 199.7.91.13#53/UDP\n    query \".\" NS to 198.97.190.53#53/UDP: win\nroot-priming: verification success - RRSIG of NS: \".\"\n\t\"a.root-servers.net.\" [\"198.41.0.4\",\"2001:503:ba3e::2:30\"]\n\t\"b.root-servers.net.\" [\"199.9.14.201\",\"2001:500:200::b\"]\n\t\"c.root-servers.net.\" [\"192.33.4.12\",\"2001:500:2::c\"]\n\t\"d.root-servers.net.\" [\"199.7.91.13\",\"2001:500:2d::d\"]\n\t\"e.root-servers.net.\" [\"192.203.230.10\",\"2001:500:a8::e\"]\n\t\"f.root-servers.net.\" [\"192.5.5.241\",\"2001:500:2f::f\"]\n\t\"g.root-servers.net.\" [\"192.112.36.4\",\"2001:500:12::d0d\"]\n\t\"h.root-servers.net.\" [\"198.97.190.53\",\"2001:500:1::53\"]\n\t\"i.root-servers.net.\" [\"192.36.148.17\",\"2001:7fe::53\"]\n\t\"j.root-servers.net.\" [\"192.58.128.30\",\"2001:503:c27::2:30\"]\n\t\"k.root-servers.net.\" [\"193.0.14.129\",\"2001:7fd::1\"]\n\t\"l.root-servers.net.\" [\"199.7.83.42\",\"2001:500:9f::42\"]\n\t\"m.root-servers.net.\" [\"202.12.27.33\",\"2001:dc3::35\"]\nzone: \".\":\n\t\"a.root-servers.net.\" [\"198.41.0.4\",\"2001:503:ba3e::2:30\"]\n\t\"b.root-servers.net.\" [\"199.9.14.201\",\"2001:500:200::b\"]\n\t\"c.root-servers.net.\" [\"192.33.4.12\",\"2001:500:2::c\"]\n\t\"d.root-servers.net.\" [\"199.7.91.13\",\"2001:500:2d::d\"]\n\t\"e.root-servers.net.\" [\"192.203.230.10\",\"2001:500:a8::e\"]\n\t\"f.root-servers.net.\" [\"192.5.5.241\",\"2001:500:2f::f\"]\n\t\"g.root-servers.net.\" [\"192.112.36.4\",\"2001:500:12::d0d\"]\n\t\"h.root-servers.net.\" [\"198.97.190.53\",\"2001:500:1::53\"]\n\t\"i.root-servers.net.\" [\"192.36.148.17\",\"2001:7fe::53\"]\n\t\"j.root-servers.net.\" [\"192.58.128.30\",\"2001:503:c27::2:30\"]\n\t\"k.root-servers.net.\" [\"193.0.14.129\",\"2001:7fd::1\"]\n\t\"l.root-servers.net.\" [\"199.7.83.42\",\"2001:500:9f::42\"]\n\t\"m.root-servers.net.\" [\"202.12.27.33\",\"2001:dc3::35\"]\niterative: query (\"jp.\",A) servers: 2001:500:a8::e 2001:500:200::b 2001:503:c27::2:30 2001:503:ba3e::2:30\n    query \"jp.\" A to 2001:500:a8::e#53/UDP\n    query \"jp.\" A to 2001:500:200::b#53/UDP\n    query \"jp.\" A to 2001:503:c27::2:30#53/UDP\n    query \"jp.\" A to 2001:503:ba3e::2:30#53/UDP\n    query \"jp.\" A to 2001:500:a8::e#53/UDP: win\ndelegation - verification success - RRSIG of DS: \".\" -\u003e \"jp.\"\n\t\"a.dns.jp.\" [\"203.119.1.1\",\"2001:dc4::1\"]\n\t\"b.dns.jp.\" [\"202.12.30.131\",\"2001:dc2::1\"]\n\t\"c.dns.jp.\" [\"156.154.100.5\",\"2001:502:ad09::5\"]\n\t\"d.dns.jp.\" [\"210.138.175.244\",\"2001:240::53\"]\n\t\"e.dns.jp.\" [\"192.50.43.53\",\"2001:200:c000::35\"]\n\t\"f.dns.jp.\" [\"150.100.6.8\",\"2001:2f8:0:100::153\"]\n\t\"g.dns.jp.\" [\"203.119.40.1\"]\n\t\"h.dns.jp.\" [\"161.232.72.25\",\"2a01:8840:1bc::25\"]\n    query \"jp.\" DNSKEY to 2001:dc4::1#53/UDP\n    query \"jp.\" DNSKEY to 2a01:8840:1bc::25#53/UDP\n    query \"jp.\" DNSKEY to 150.100.6.8#53/UDP\n    query \"jp.\" DNSKEY to 156.154.100.5#53/UDP\n    query \"jp.\" DNSKEY to 2001:dc4::1#53/UDP: win\nzone: \"jp.\":\n\t\"a.dns.jp.\" [\"203.119.1.1\",\"2001:dc4::1\"]\n\t\"b.dns.jp.\" [\"202.12.30.131\",\"2001:dc2::1\"]\n\t\"c.dns.jp.\" [\"156.154.100.5\",\"2001:502:ad09::5\"]\n\t\"d.dns.jp.\" [\"210.138.175.244\",\"2001:240::53\"]\n\t\"e.dns.jp.\" [\"192.50.43.53\",\"2001:200:c000::35\"]\n\t\"f.dns.jp.\" [\"150.100.6.8\",\"2001:2f8:0:100::153\"]\n\t\"g.dns.jp.\" [\"203.119.40.1\"]\n\t\"h.dns.jp.\" [\"161.232.72.25\",\"2a01:8840:1bc::25\"]\niterative: query (\"ad.jp.\",A) servers: 150.100.6.8 156.154.100.5 161.232.72.25 192.50.43.53\n    query \"ad.jp.\" A to 150.100.6.8#53/UDP\n    query \"ad.jp.\" A to 156.154.100.5#53/UDP\n    query \"ad.jp.\" A to 161.232.72.25#53/UDP\n    query \"ad.jp.\" A to 192.50.43.53#53/UDP\n    query \"ad.jp.\" A to 192.50.43.53#53/UDP: win\nno delegation: \"jp.\" -\u003e \"ad.jp.\"\nzone: \"jp.\":\n\t\"a.dns.jp.\" [\"203.119.1.1\",\"2001:dc4::1\"]\n\t\"b.dns.jp.\" [\"202.12.30.131\",\"2001:dc2::1\"]\n\t\"c.dns.jp.\" [\"156.154.100.5\",\"2001:502:ad09::5\"]\n\t\"d.dns.jp.\" [\"210.138.175.244\",\"2001:240::53\"]\n\t\"e.dns.jp.\" [\"192.50.43.53\",\"2001:200:c000::35\"]\n\t\"f.dns.jp.\" [\"150.100.6.8\",\"2001:2f8:0:100::153\"]\n\t\"g.dns.jp.\" [\"203.119.40.1\"]\n\t\"h.dns.jp.\" [\"161.232.72.25\",\"2a01:8840:1bc::25\"]\niterative: query (\"iij.ad.jp.\",A) servers: 2001:502:ad09::5 2001:dc2::1 2001:dc4::1 2a01:8840:1bc::25\n    query \"iij.ad.jp.\" A to 2001:502:ad09::5#53/UDP\n    query \"iij.ad.jp.\" A to 2001:dc2::1#53/UDP\n    query \"iij.ad.jp.\" A to 2001:dc4::1#53/UDP\n    query \"iij.ad.jp.\" A to 2a01:8840:1bc::25#53/UDP\n    query \"iij.ad.jp.\" A to 2001:dc4::1#53/UDP: win\ndelegation - verification success - RRSIG of DS: \"jp.\" -\u003e \"iij.ad.jp.\"\n\t\"dns0.iij.ad.jp.\" [\"210.130.0.5\",\"2001:240::105\"]\n\t\"dns1.iij.ad.jp.\" [\"210.130.1.5\",\"2001:240::115\"]\n    query \"iij.ad.jp.\" DNSKEY to 210.130.0.5#53/UDP\n    query \"iij.ad.jp.\" DNSKEY to 210.130.1.5#53/UDP\n    query \"iij.ad.jp.\" DNSKEY to 2001:240::105#53/UDP\n    query \"iij.ad.jp.\" DNSKEY to 2001:240::115#53/UDP\n    query \"iij.ad.jp.\" DNSKEY to 2001:240::105#53/UDP: win\nzone: \"iij.ad.jp.\":\n\t\"dns0.iij.ad.jp.\" [\"210.130.0.5\",\"2001:240::105\"]\n\t\"dns1.iij.ad.jp.\" [\"210.130.1.5\",\"2001:240::115\"]\niterative: query (\"www.iij.ad.jp.\",A) servers: 210.130.0.5 210.130.1.5 2001:240::105 2001:240::115\n    query \"www.iij.ad.jp.\" A to 210.130.0.5#53/UDP\n    query \"www.iij.ad.jp.\" A to 210.130.1.5#53/UDP\n    query \"www.iij.ad.jp.\" A to 2001:240::105#53/UDP\n    query \"www.iij.ad.jp.\" A to 2001:240::115#53/UDP\n    query \"www.iij.ad.jp.\" A to 2001:240::105#53/UDP: win\nno delegation: \"iij.ad.jp.\" -\u003e \"www.iij.ad.jp.\"\nresolve-exact: query (\"www.iij.ad.jp.\",A) servers: 210.130.0.5 210.130.1.5 2001:240::105 2001:240::115\n    query \"www.iij.ad.jp.\" A to 210.130.0.5#53/UDP\n    query \"www.iij.ad.jp.\" A to 210.130.1.5#53/UDP\n    query \"www.iij.ad.jp.\" A to 2001:240::105#53/UDP\n    query \"www.iij.ad.jp.\" A to 2001:240::115#53/UDP\n    query \"www.iij.ad.jp.\" A to 210.130.0.5#53/UDP: win\nverification success - RRSIG of \"www.iij.ad.jp.\" A\n;; 178usec\n\n;; HEADER SECTION:\n;Standard query, NoError, id: 0\n;Flags: Recursion Desired, Recursion Available\n\n\n;; QUESTION SECTION:\n;www.iij.ad.jp.\t\tIN\tA\n\n;; ANSWER SECTION:\nwww.iij.ad.jp.\t300(5 mins)\tIN\tA\t202.232.2.180\n\n;; AUTHORITY SECTION:\n\n;; ADDITIONAL SECTION:\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fiijlab%2Fdnsext","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fiijlab%2Fdnsext","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fiijlab%2Fdnsext/lists"}