{"id":13573361,"url":"https://github.com/redirect2me/which-dns","last_synced_at":"2026-01-26T05:10:48.653Z","repository":{"id":40570303,"uuid":"227702045","full_name":"redirect2me/which-dns","owner":"redirect2me","description":"Detects which DNS server is being used - https://which.nameserve.rs/","archived":false,"fork":false,"pushed_at":"2025-09-14T10:55:54.000Z","size":145,"stargazers_count":412,"open_issues_count":0,"forks_count":7,"subscribers_count":10,"default_branch":"main","last_synced_at":"2025-09-14T12:32:08.688Z","etag":null,"topics":["dns","dns-resolver","nameserver","resolver"],"latest_commit_sha":null,"homepage":"https://which.nameserve.rs/","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/redirect2me.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":"2019-12-12T21:44:21.000Z","updated_at":"2025-09-14T10:55:58.000Z","dependencies_parsed_at":"2024-01-14T09:33:39.988Z","dependency_job_id":"a1d2747f-939c-4535-9d2d-53c806c0de22","html_url":"https://github.com/redirect2me/which-dns","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/redirect2me/which-dns","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/redirect2me%2Fwhich-dns","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/redirect2me%2Fwhich-dns/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/redirect2me%2Fwhich-dns/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/redirect2me%2Fwhich-dns/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/redirect2me","download_url":"https://codeload.github.com/redirect2me/which-dns/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/redirect2me%2Fwhich-dns/sbom","scorecard":{"id":767812,"data":{"date":"2025-08-11","repo":{"name":"github.com/redirect2me/which-dns","commit":"ecd09241319659c504078bbd84baf90120798833"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.1,"checks":[{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Code-Review","score":0,"reason":"Found 1/30 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/release.yaml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yaml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/redirect2me/which-dns/release.yaml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yaml:30: update your workflow using https://app.stepsecurity.io/secureworkflow/redirect2me/which-dns/release.yaml/main?enable=pin","Warn: goCommand not pinned by hash: .github/workflows/release.yaml:42","Info:   0 out of   2 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   1 goCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE.txt:0","Info: FSF or OSI recognized license: GNU Affero General Public License v3.0: LICENSE.txt:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact 0.1.4 not signed: https://api.github.com/repos/redirect2me/which-dns/releases/118289017","Warn: release artifact 0.1.4 does not have provenance: https://api.github.com/repos/redirect2me/which-dns/releases/118289017"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'main'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 1 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":9,"reason":"1 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-q82r-2j7m-9rv4"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-23T01:21:18.283Z","repository_id":40570303,"created_at":"2025-08-23T01:21:18.283Z","updated_at":"2025-08-23T01:21:18.283Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28767045,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-26T03:54:34.369Z","status":"ssl_error","status_checked_at":"2026-01-26T03:54:33.031Z","response_time":59,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["dns","dns-resolver","nameserver","resolver"],"created_at":"2024-08-01T15:00:33.684Z","updated_at":"2026-01-26T05:10:48.647Z","avatar_url":"https://github.com/redirect2me.png","language":"Go","funding_links":[],"categories":["Go","others"],"sub_categories":[],"readme":"# Which DNS: DNS Resolver Detection [\u003cimg alt=\"Which DNS Logo\" src=\"assets/favicon.svg\" height=\"90\" align=\"right\"/\u003e](https://which.resolve.rs/)\n\nThis is a combined DNS+HTTP server that shows which DNS server a computer is using.\n\n\n## How does it work?\n\n1. You make a request to a hostname with a unique prefix.\n2. All hostnames resolve to the same IP, but the DNS server records which IP address the query came from.\n3. The webserver looks for this record and returns it.\n\n## Using\n\nMy server is running at `which.resolve.rs`.\n\nBe forewarned: it is running on the cheapest box I could find with a static IP.  You can hit it for light, non-commercial use.  I specifically made the API be JSONP only (i.e. you need to provide a `callback` parameter), so if you abuse it, bad things will happen to your clients!\n\nMake an HTTPS request to `GUID.which.resolve.rs/api.json?callback=myfunction`.  The `GUID` should be a unique string (not necessarily an actual GUID), different for every call. It will call `myfunction` with an object that has the following fields:\n\n* `success` - boolean if it succeeded or not\n* `output` - the result (if it succeeded)\n* `message` - the error message (if it failed)\n* `source` - the source IP address (useful for detecting self-hosted DNS)\n\nYou can see it in action on the home page of [resolve.rs](https://resolve.rs/).\n\n## Running your own copy\n\nYou need a static IP address to run this server.\n\nThen you need to decide on two host names:\n\n* `hostname` is the name of the subdomain that this server will own (for example: `which.example.com`)\n* `nshostname` is the name of the authoritative name server for the subdomain (for example: `which-dns.example.com`)\n\nThey will both be served by the same server and at the same IP address.\n\nThe following DNS records need to be added to the main domain (for the above examples this would be `example.com`):\n\n* A for the `nshostname` pointing to the static IP\n* NS for the `hostname` pointing to the `nshostname`\n\nThe program needs access to the following ports:\n\n* 53: for DNS\n* 80: for HTTP\n* 443: for HTTPS\n\nThe following parameters are required:\n\n* email: the email address for your account with Let's Encrypt (and the SOA record)\n* hostname: the `hostname` that you picked\n* ipaddress: the public IP address of the server\n* nshostname: the `nshostname` that you picked\n\nOptional parameters:\n\n* disclaimer: text to include in every response (for example: \"no commercial use\")\n* proxy: true if behind a trusted proxy (uses `X-Forwarded-For` header)\n\n## License\n\n[GNU Affero General Public License v3.0](LICENSE.txt)\n\n## Credits\n\n[![certmagic](https://www.vectorlogo.zone/logos/github_mholt_certmagic/github_mholt_certmagic-ar21.svg)](https://github.com/mholt/certmagic \"Certificate management\")\n[![Digital Ocean](https://www.vectorlogo.zone/logos/digitalocean/digitalocean-ar21.svg)](https://m.do.co/c/976f479b2317 \"Hosting\")\n[![Git](https://www.vectorlogo.zone/logos/git-scm/git-scm-ar21.svg)](https://git-scm.com/ \"Version control\")\n[![Github](https://www.vectorlogo.zone/logos/github/github-ar21.svg)](https://github.com/ \"Code hosting\")\n[![golang](https://www.vectorlogo.zone/logos/golang/golang-ar21.svg)](https://golang.org/ \"Programming language\")\n[![GoatCounter](https://www.vectorlogo.zone/logos/goatcounter/goatcounter-ar21.svg)](https://www.goatcounter.com/ \"Traffic Measurement\")\n[![Let's Encrypt](https://www.vectorlogo.zone/logos/letsencrypt/letsencrypt-ar21.svg)](https://letsencrypt.org/ \"HTTPS certificates\")\n[![svgrepo](https://www.vectorlogo.zone/logos/svgrepo/svgrepo-ar21.svg)](https://www.svgrepo.com/svg/277712/witch \"favicon (modified)\")\n[![Ubuntu](https://www.vectorlogo.zone/logos/ubuntu/ubuntu-ar21.svg)](https://www.ubuntu.com/ \"Server operating system\")\n[![water.css](https://www.vectorlogo.zone/logos/netlifyapp_watercss/netlifyapp_watercss-ar21.svg)](https://watercss.netlify.app/ \"Classless CSS\")\n\n## Alternatives\n\nI wasn't the first person to come up with this idea.  Here are some other public sites that do the same thing:\n\n* [DNS-OARC's Check My DNS](https://cmdns.dev.dns-oarc.net/) - comprehensive: see the popup under \"Network\".\n* [dnsleaktest](https://dnsleaktest.com/)\n* [whatsmydnsserver](http://www.whatsmydnsserver.com/)\n* [ipleak.net](https://ipleak.net/) - a bit of information overload though.\n* [benchmark from GRC](https://www.grc.com/dns/benchmark.htm) - fat-client tool to benchmark which DNS servers are fastest from your workstation.\n* [dnsadblock](https://dnsadblock.com/dns-leak-test/)\n* [akahelp.net](https://developer.akamai.com/blog/2018/05/10/introducing-new-whoami-tool-dns-resolver-information) - name server that you can use with `dig`\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fredirect2me%2Fwhich-dns","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fredirect2me%2Fwhich-dns","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fredirect2me%2Fwhich-dns/lists"}