Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package doggo for openSUSE:Factory checked in at 2025-12-22 22:49:31 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/doggo (Old) and /work/SRC/openSUSE:Factory/.doggo.new.1928 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "doggo" Mon Dec 22 22:49:31 2025 rev:6 rq:1323958 version:1.1.3 Changes: -------- --- /work/SRC/openSUSE:Factory/doggo/doggo.changes 2025-11-02 22:35:09.441172877 +0100 +++ /work/SRC/openSUSE:Factory/.doggo.new.1928/doggo.changes 2025-12-22 22:51:53.871594675 +0100 @@ -1,0 +2,19 @@ +Sun Dec 21 06:28:58 UTC 2025 - Johannes Kastl <[email protected]> + +- Update to version 1.1.3: + * New Features + - 23fdfe1: feat(web): add SEO meta tags and FAQ page + (@mr-karan) + - 39bae49: feat: add macOS SystemConfiguration DNS support and + internal strategy (#193) (@phrawzty) + * Bug fixes + - 15d6c34: fix: restore table text wrapping and respect -4/-6 + flags for query types (@mr-karan) + * Others + - 46a1de3: chore: upgrade go dependencies (@mr-karan) + - 47136e4: docs(README): add mise alternative method + installation (@jylenhof) + - d1091e3: refactor: address PR #227 review feedback + (@phrawzty) + +------------------------------------------------------------------- Old: ---- doggo-1.1.2.obscpio New: ---- doggo-1.1.3.obscpio ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ doggo.spec ++++++ --- /var/tmp/diff_new_pack.FvEFCP/_old 2025-12-22 22:51:54.999641150 +0100 +++ /var/tmp/diff_new_pack.FvEFCP/_new 2025-12-22 22:51:55.003641315 +0100 @@ -17,7 +17,7 @@ Name: doggo -Version: 1.1.2 +Version: 1.1.3 Release: 0 Summary: CLI tool and API server DNS client implemented in Go License: GPL-3.0-only @@ -25,7 +25,7 @@ URL: https://github.com/mr-karan/doggo Source0: %{name}-%{version}.tar Source1: vendor.tar.xz -BuildRequires: golang(API) >= 1.25 +BuildRequires: go1.25 >= 1.25.5 Recommends: %{name}-bash-completion Suggests: %{name}-fish-completion Suggests: %{name}-zsh-completion ++++++ _service ++++++ --- /var/tmp/diff_new_pack.FvEFCP/_old 2025-12-22 22:51:55.043642963 +0100 +++ /var/tmp/diff_new_pack.FvEFCP/_new 2025-12-22 22:51:55.047643128 +0100 @@ -2,7 +2,7 @@ <service name="obs_scm" mode="manual"> <param name="scm">git</param> <param name="url">https://github.com/mr-karan/doggo.git</param> - <param name="revision">v1.1.2</param> + <param name="revision">v1.1.3</param> <param name="match-tag">*</param> <param name="versionrewrite-pattern">v(\d+\.\d+\.\d+)</param> <param name="versionformat">@PARENT_TAG@</param> ++++++ _servicedata ++++++ --- /var/tmp/diff_new_pack.FvEFCP/_old 2025-12-22 22:51:55.083644611 +0100 +++ /var/tmp/diff_new_pack.FvEFCP/_new 2025-12-22 22:51:55.095645105 +0100 @@ -1,6 +1,6 @@ <servicedata> <service name="tar_scm"> <param name="url">https://github.com/mr-karan/doggo.git</param> - <param name="changesrevision">deea9773d44d72aae73d5b5f033e747306c51134</param></service></servicedata> + <param name="changesrevision">46a1de3ae6ee61267b678e7493a52657fde1bf74</param></service></servicedata> (No newline at EOF) ++++++ doggo-1.1.2.obscpio -> doggo-1.1.3.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/doggo-1.1.2/README.md new/doggo-1.1.3/README.md --- old/doggo-1.1.2/README.md 2025-11-01 14:20:59.000000000 +0100 +++ new/doggo-1.1.3/README.md 2025-12-20 15:05:13.000000000 +0100 @@ -33,6 +33,7 @@ - Homebrew: `brew install doggo` - MacPorts (macOS): `port install doggo` - Arch Linux: `yay -S doggo-bin` +- [Mise](https://github.com/jdx/mise): `mise use -g doggo@latest` - Nix: `nix profile install nixpkgs#doggo` - Scoop (Windows): `scoop install doggo` - Winget (Windows): `winget install doggo` diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/doggo-1.1.2/cmd/doggo/cli.go new/doggo-1.1.3/cmd/doggo/cli.go --- old/doggo-1.1.2/cmd/doggo/cli.go 2025-11-01 14:20:59.000000000 +0100 +++ new/doggo-1.1.3/cmd/doggo/cli.go 2025-12-20 15:05:13.000000000 +0100 @@ -158,7 +158,7 @@ f.Int("ndots", -1, "Specify the ndots parameter") f.BoolP("ipv4", "4", false, "Use IPv4 only") f.BoolP("ipv6", "6", false, "Use IPv6 only") - f.String("strategy", "all", "Strategy to query nameservers in resolv.conf file") + f.String("strategy", "all", "Strategy to query nameservers (all, random, first, internal)") f.String("tls-hostname", "", "Hostname for certificate verification") f.Bool("skip-hostname-verification", false, "Skip TLS Hostname Verification") diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/doggo-1.1.2/cmd/doggo/completions.go new/doggo-1.1.3/cmd/doggo/completions.go --- old/doggo-1.1.2/cmd/doggo/completions.go 2025-11-01 14:20:59.000000000 +0100 +++ new/doggo-1.1.3/cmd/doggo/completions.go 2025-12-20 15:05:13.000000000 +0100 @@ -29,7 +29,7 @@ return 0 ;; --strategy) - COMPREPLY=( $(compgen -W "all random first" -- ${cur}) ) + COMPREPLY=( $(compgen -W "all random first internal" -- ${cur}) ) return 0 ;; --search|--color) @@ -65,7 +65,7 @@ '(-c --class)'{-c,--class}'[Network class of the DNS record being queried]:network class:(IN CH HS)' \ '(-r --reverse)'{-r,--reverse}'[Performs a DNS Lookup for an IPv4 or IPv6 address]' \ '--any[Query all supported DNS record types]' \ - '--strategy[Strategy to query nameserver listed in etc/resolv.conf]:strategy:(all random first)' \ + '--strategy[Strategy to query nameserver listed in etc/resolv.conf]:strategy:(all random first internal)' \ '--ndots[Number of required dots in hostname to assume FQDN]:number of dots' \ '--search[Use the search list defined in resolv.conf]:setting:(true false)' \ '--timeout[Timeout (in seconds) for the resolver to return a response]:seconds' \ @@ -128,7 +128,7 @@ complete -c doggo -n '__fish_doggo_no_subcommand' -l 'any' -d "Query all supported DNS record types" # Resolver options -complete -c doggo -n '__fish_doggo_no_subcommand' -l 'strategy' -d "Strategy to query nameserver listed in etc/resolv.conf" -x -a "all random first" +complete -c doggo -n '__fish_doggo_no_subcommand' -l 'strategy' -d "Strategy to query nameserver listed in etc/resolv.conf" -x -a "all random first internal" complete -c doggo -n '__fish_doggo_no_subcommand' -l 'ndots' -d "Specify ndots parameter" complete -c doggo -n '__fish_doggo_no_subcommand' -l 'search' -d "Use the search list defined in resolv.conf" -x -a "true false" complete -c doggo -n '__fish_doggo_no_subcommand' -l 'timeout' -d "Specify timeout (in seconds) for the resolver to return a response" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/doggo-1.1.2/cmd/doggo/help.go new/doggo-1.1.3/cmd/doggo/help.go --- old/doggo-1.1.2/cmd/doggo/help.go 2025-11-01 14:20:59.000000000 +0100 +++ new/doggo-1.1.3/cmd/doggo/help.go 2025-12-20 15:05:13.000000000 +0100 @@ -121,7 +121,7 @@ {"--any", "Query all supported DNS record types (A, AAAA, CNAME, MX, NS, PTR, SOA, SRV, TXT, CAA)."}, }, "ResolverOptions": []Option{ - {"--strategy=STRATEGY", "Specify strategy to query nameserver listed in etc/resolv.conf. (all, random, first)."}, + {"--strategy=STRATEGY", "Specify strategy to query nameserver listed in etc/resolv.conf. Options: all, random, first, internal (RFC 1918/ULA private IPs only)."}, {"--ndots=INT", "Specify ndots parameter. Takes value from /etc/resolv.conf if using the system namesever or 1 otherwise."}, {"--search", "Use the search list defined in resolv.conf. Defaults to true. Set --search=false to disable search list."}, {"--timeout=DURATION", "Specify timeout for the resolver to return a response (e.g., 5s, 400ms, 1m)."}, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/doggo-1.1.2/go.mod new/doggo-1.1.3/go.mod --- old/doggo-1.1.2/go.mod 2025-11-01 14:20:59.000000000 +0100 +++ new/doggo-1.1.3/go.mod 2025-12-20 15:05:13.000000000 +0100 @@ -1,6 +1,6 @@ module github.com/mr-karan/doggo -go 1.25.3 +go 1.25.5 require ( github.com/ameshkov/dnscrypt/v2 v2.4.0 @@ -10,20 +10,21 @@ github.com/jsdelivr/globalping-cli v1.5.1 github.com/knadh/koanf/parsers/toml v0.1.0 github.com/knadh/koanf/providers/env v1.1.0 - github.com/knadh/koanf/providers/file v1.2.0 + github.com/knadh/koanf/providers/file v1.2.1 github.com/knadh/koanf/providers/posflag v1.0.1 github.com/knadh/koanf/v2 v2.3.0 - github.com/miekg/dns v1.1.68 - github.com/olekukonko/tablewriter v1.1.0 - github.com/quic-go/quic-go v0.55.0 + github.com/miekg/dns v1.1.69 + github.com/olekukonko/tablewriter v1.1.2 + github.com/quic-go/quic-go v0.57.1 github.com/spf13/pflag v1.0.10 - golang.org/x/net v0.46.0 - golang.org/x/sys v0.37.0 + golang.org/x/net v0.48.0 + golang.org/x/sys v0.39.0 ) require ( - github.com/AdguardTeam/golibs v0.35.2 // indirect + github.com/AdguardTeam/golibs v0.35.5 // indirect github.com/andybalholm/brotli v1.2.0 // indirect + github.com/clipperhouse/displaywidth v0.6.2 // indirect github.com/clipperhouse/stringish v0.1.1 // indirect github.com/clipperhouse/uax29/v2 v2.3.0 // indirect github.com/fsnotify/fsnotify v1.9.0 // indirect @@ -36,14 +37,14 @@ github.com/mitchellh/reflectwalk v1.0.2 // indirect github.com/olekukonko/cat v0.0.0-20250911104152-50322a0618f6 // indirect github.com/olekukonko/errors v1.1.0 // indirect - github.com/olekukonko/ll v0.1.2 // indirect + github.com/olekukonko/ll v0.1.3 // indirect github.com/pelletier/go-toml v1.9.5 // indirect github.com/rivo/uniseg v0.4.7 // indirect go.uber.org/mock v0.6.0 // indirect - golang.org/x/crypto v0.43.0 // indirect - golang.org/x/exp v0.0.0-20251023183803-a4bb9ffd2546 // indirect - golang.org/x/mod v0.29.0 // indirect - golang.org/x/sync v0.17.0 // indirect - golang.org/x/text v0.30.0 // indirect - golang.org/x/tools v0.38.0 // indirect + golang.org/x/crypto v0.46.0 // indirect + golang.org/x/exp v0.0.0-20251219203646-944ab1f22d93 // indirect + golang.org/x/mod v0.31.0 // indirect + golang.org/x/sync v0.19.0 // indirect + golang.org/x/text v0.32.0 // indirect + golang.org/x/tools v0.40.0 // indirect ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/doggo-1.1.2/go.sum new/doggo-1.1.3/go.sum --- old/doggo-1.1.2/go.sum 2025-11-01 14:20:59.000000000 +0100 +++ new/doggo-1.1.3/go.sum 2025-12-20 15:05:13.000000000 +0100 @@ -1,11 +1,15 @@ github.com/AdguardTeam/golibs v0.35.2 h1:GVlx/CiCz5ZXQmyvFrE3JyeGsgubE8f4rJvRshYJVVs= github.com/AdguardTeam/golibs v0.35.2/go.mod h1:p/l6tG7QCv+Hi5yVpv1oZInoatRGOWoyD1m+Ume+ZNY= +github.com/AdguardTeam/golibs v0.35.5 h1:qbe7jkjm+qtvPJGo3UnAp0lsPVpuHULfivXUkyVujZE= +github.com/AdguardTeam/golibs v0.35.5/go.mod h1:meFdRqMtG/PLW6LD20MYAlcRbwAVowlbunHgE17xz9s= github.com/ameshkov/dnscrypt/v2 v2.4.0 h1:if6ZG2cuQmcP2TwSY+D0+8+xbPfoatufGlOQTMNkI9o= github.com/ameshkov/dnscrypt/v2 v2.4.0/go.mod h1:WpEFV2uhebXb8Jhes/5/fSdpmhGV8TL22RDaeWwV6hI= github.com/ameshkov/dnsstamps v1.0.3 h1:Srzik+J9mivH1alRACTbys2xOxs0lRH9qnTA7Y1OYVo= github.com/ameshkov/dnsstamps v1.0.3/go.mod h1:Ii3eUu73dx4Vw5O4wjzmT5+lkCwovjzaEZZ4gKyIH5A= github.com/andybalholm/brotli v1.2.0 h1:ukwgCxwYrmACq68yiUqwIWnGY0cTPox/M94sVwToPjQ= github.com/andybalholm/brotli v1.2.0/go.mod h1:rzTDkvFWvIrjDXZHkuS16NPggd91W3kUSvPlQ1pLaKY= +github.com/clipperhouse/displaywidth v0.6.2 h1:ZDpTkFfpHOKte4RG5O/BOyf3ysnvFswpyYrV7z2uAKo= +github.com/clipperhouse/displaywidth v0.6.2/go.mod h1:R+kHuzaYWFkTm7xoMmK1lFydbci4X2CicfbGstSGg0o= github.com/clipperhouse/stringish v0.1.1 h1:+NSqMOr3GR6k1FdRhhnXrLfztGzuG+VuFDfatpWHKCs= github.com/clipperhouse/stringish v0.1.1/go.mod h1:v/WhFtE1q0ovMta2+m+UbpZ+2/HEXNWYXQgCt4hdOzA= github.com/clipperhouse/uax29/v2 v2.3.0 h1:SNdx9DVUqMoBuBoW3iLOj4FQv3dN5mDtuqwuhIGpJy4= @@ -32,6 +36,8 @@ github.com/knadh/koanf/providers/env v1.1.0/go.mod h1:QhHHHZ87h9JxJAn2czdEl6pdkNnDh/JS1Vtsyt65hTY= github.com/knadh/koanf/providers/file v1.2.0 h1:hrUJ6Y9YOA49aNu/RSYzOTFlqzXSCpmYIDXI7OJU6+U= github.com/knadh/koanf/providers/file v1.2.0/go.mod h1:bp1PM5f83Q+TOUu10J/0ApLBd9uIzg+n9UgthfY+nRA= +github.com/knadh/koanf/providers/file v1.2.1 h1:bEWbtQwYrA+W2DtdBrQWyXqJaJSG3KrP3AESOJYp9wM= +github.com/knadh/koanf/providers/file v1.2.1/go.mod h1:bp1PM5f83Q+TOUu10J/0ApLBd9uIzg+n9UgthfY+nRA= github.com/knadh/koanf/providers/posflag v1.0.1 h1:EnMxHSrPkYCFnKgBUl5KBgrjed8gVFrcXDzaW4l/C6Y= github.com/knadh/koanf/providers/posflag v1.0.1/go.mod h1:3Wn3+YG3f4ljzRyCUgIwH7G0sZ1pMjCOsNBovrbKmAk= github.com/knadh/koanf/v2 v2.3.0 h1:Qg076dDRFHvqnKG97ZEsi9TAg2/nFTa9hCdcSa1lvlM= @@ -44,6 +50,8 @@ github.com/mattn/go-runewidth v0.0.19/go.mod h1:XBkDxAl56ILZc9knddidhrOlY5R/pDhgLpndooCuJAs= github.com/miekg/dns v1.1.68 h1:jsSRkNozw7G/mnmXULynzMNIsgY2dHC8LO6U6Ij2JEA= github.com/miekg/dns v1.1.68/go.mod h1:fujopn7TB3Pu3JM69XaawiU0wqjpL9/8xGop5UrTPps= +github.com/miekg/dns v1.1.69 h1:Kb7Y/1Jo+SG+a2GtfoFUfDkG//csdRPwRLkCsxDG9Sc= +github.com/miekg/dns v1.1.69/go.mod h1:7OyjD9nEba5OkqQ/hB4fy3PIoxafSZJtducccIelz3g= github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw= github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s= github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ= @@ -54,14 +62,20 @@ github.com/olekukonko/errors v1.1.0/go.mod h1:ppzxA5jBKcO1vIpCXQ9ZqgDh8iwODz6OXIGKU8r5m4Y= github.com/olekukonko/ll v0.1.2 h1:lkg/k/9mlsy0SxO5aC+WEpbdT5K83ddnNhAepz7TQc0= github.com/olekukonko/ll v0.1.2/go.mod h1:b52bVQRRPObe+yyBl0TxNfhesL0nedD4Cht0/zx55Ew= +github.com/olekukonko/ll v0.1.3 h1:sV2jrhQGq5B3W0nENUISCR6azIPf7UBUpVq0x/y70Fg= +github.com/olekukonko/ll v0.1.3/go.mod h1:b52bVQRRPObe+yyBl0TxNfhesL0nedD4Cht0/zx55Ew= github.com/olekukonko/tablewriter v1.1.0 h1:N0LHrshF4T39KvI96fn6GT8HEjXRXYNDrDjKFDB7RIY= github.com/olekukonko/tablewriter v1.1.0/go.mod h1:5c+EBPeSqvXnLLgkm9isDdzR3wjfBkHR9Nhfp3NWrzo= +github.com/olekukonko/tablewriter v1.1.2 h1:L2kI1Y5tZBct/O/TyZK1zIE9GlBj/TVs+AY5tZDCDSc= +github.com/olekukonko/tablewriter v1.1.2/go.mod h1:z7SYPugVqGVavWoA2sGsFIoOVNmEHxUAAMrhXONtfkg= github.com/pelletier/go-toml v1.9.5 h1:4yBQzkHv+7BHq2PQUZF3Mx0IYxG7LsP222s7Agd3ve8= github.com/pelletier/go-toml v1.9.5/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/quic-go/quic-go v0.55.0 h1:zccPQIqYCXDt5NmcEabyYvOnomjs8Tlwl7tISjJh9Mk= github.com/quic-go/quic-go v0.55.0/go.mod h1:DR51ilwU1uE164KuWXhinFcKWGlEjzys2l8zUl5Ss1U= +github.com/quic-go/quic-go v0.57.1 h1:25KAAR9QR8KZrCZRThWMKVAwGoiHIrNbT72ULHTuI10= +github.com/quic-go/quic-go v0.57.1/go.mod h1:ly4QBAjHA2VhdnxhojRsCUOeJwKYg+taDlos92xb1+s= github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= github.com/spf13/pflag v1.0.10 h1:4EBh2KAYBwaONj6b2Ye1GiHfwjqyROoF4RwYO+vPwFk= @@ -74,20 +88,36 @@ go.uber.org/mock v0.6.0/go.mod h1:KiVJ4BqZJaMj4svdfmHM0AUx4NJYO8ZNpPnZn1Z+BBU= golang.org/x/crypto v0.43.0 h1:dduJYIi3A3KOfdGOHX8AVZ/jGiyPa3IbBozJ5kNuE04= golang.org/x/crypto v0.43.0/go.mod h1:BFbav4mRNlXJL4wNeejLpWxB7wMbc79PdRGhWKncxR0= +golang.org/x/crypto v0.46.0 h1:cKRW/pmt1pKAfetfu+RCEvjvZkA9RimPbh7bhFjGVBU= +golang.org/x/crypto v0.46.0/go.mod h1:Evb/oLKmMraqjZ2iQTwDwvCtJkczlDuTmdJXoZVzqU0= golang.org/x/exp v0.0.0-20251023183803-a4bb9ffd2546 h1:mgKeJMpvi0yx/sU5GsxQ7p6s2wtOnGAHZWCHUM4KGzY= golang.org/x/exp v0.0.0-20251023183803-a4bb9ffd2546/go.mod h1:j/pmGrbnkbPtQfxEe5D0VQhZC6qKbfKifgD0oM7sR70= +golang.org/x/exp v0.0.0-20251219203646-944ab1f22d93 h1:fQsdNF2N+/YewlRZiricy4P1iimyPKZ/xwniHj8Q2a0= +golang.org/x/exp v0.0.0-20251219203646-944ab1f22d93/go.mod h1:EPRbTFwzwjXj9NpYyyrvenVh9Y+GFeEvMNh7Xuz7xgU= golang.org/x/mod v0.29.0 h1:HV8lRxZC4l2cr3Zq1LvtOsi/ThTgWnUk/y64QSs8GwA= golang.org/x/mod v0.29.0/go.mod h1:NyhrlYXJ2H4eJiRy/WDBO6HMqZQ6q9nk4JzS3NuCK+w= +golang.org/x/mod v0.31.0 h1:HaW9xtz0+kOcWKwli0ZXy79Ix+UW/vOfmWI5QVd2tgI= +golang.org/x/mod v0.31.0/go.mod h1:43JraMp9cGx1Rx3AqioxrbrhNsLl2l/iNAvuBkrezpg= golang.org/x/net v0.46.0 h1:giFlY12I07fugqwPuWJi68oOnpfqFnJIJzaIIm2JVV4= golang.org/x/net v0.46.0/go.mod h1:Q9BGdFy1y4nkUwiLvT5qtyhAnEHgnQ/zd8PfU6nc210= +golang.org/x/net v0.48.0 h1:zyQRTTrjc33Lhh0fBgT/H3oZq9WuvRR5gPC70xpDiQU= +golang.org/x/net v0.48.0/go.mod h1:+ndRgGjkh8FGtu1w1FGbEC31if4VrNVMuKTgcAAnQRY= golang.org/x/sync v0.17.0 h1:l60nONMj9l5drqw6jlhIELNv9I0A4OFgRsG9k2oT9Ug= golang.org/x/sync v0.17.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= +golang.org/x/sync v0.19.0 h1:vV+1eWNmZ5geRlYjzm2adRgW2/mcpevXNg50YZtPCE4= +golang.org/x/sync v0.19.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.37.0 h1:fdNQudmxPjkdUTPnLn5mdQv7Zwvbvpaxqs831goi9kQ= golang.org/x/sys v0.37.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= +golang.org/x/sys v0.39.0 h1:CvCKL8MeisomCi6qNZ+wbb0DN9E5AATixKsvNtMoMFk= +golang.org/x/sys v0.39.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= golang.org/x/text v0.30.0 h1:yznKA/E9zq54KzlzBEAWn1NXSQ8DIp/NYMy88xJjl4k= golang.org/x/text v0.30.0/go.mod h1:yDdHFIX9t+tORqspjENWgzaCVXgk0yYnYuSZ8UzzBVM= +golang.org/x/text v0.32.0 h1:ZD01bjUt1FQ9WJ0ClOL5vxgxOI/sVCNgX1YtKwcY0mU= +golang.org/x/text v0.32.0/go.mod h1:o/rUWzghvpD5TXrTIBuJU77MTaN0ljMWE47kxGJQ7jY= golang.org/x/tools v0.38.0 h1:Hx2Xv8hISq8Lm16jvBZ2VQf+RLmbd7wVUsALibYI/IQ= golang.org/x/tools v0.38.0/go.mod h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs= +golang.org/x/tools v0.40.0 h1:yLkxfA+Qnul4cs9QA3KnlFu0lVmd8JJfoq+E41uSutA= +golang.org/x/tools v0.40.0/go.mod h1:Ik/tzLRlbscWpqqMRjyWYDisX8bG13FrdXp3o4Sr9lc= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/doggo-1.1.2/internal/app/globalping.go new/doggo-1.1.3/internal/app/globalping.go --- old/doggo-1.1.2/internal/app/globalping.go 2025-11-01 14:20:59.000000000 +0100 +++ new/doggo-1.1.3/internal/app/globalping.go 2025-12-20 15:05:13.000000000 +0100 @@ -124,6 +124,8 @@ Symbols: tw.NewSymbols(tw.StyleLight), }), tablewriter.WithPadding(tw.Padding{Left: "", Right: " ", Overwrite: true}), + tablewriter.WithRowAutoWrap(tw.WrapNormal), + tablewriter.WithRowMaxWidth(30), tablewriter.WithHeaderAlignment(tw.AlignLeft), ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/doggo-1.1.2/internal/app/nameservers.go new/doggo-1.1.3/internal/app/nameservers.go --- old/doggo-1.1.2/internal/app/nameservers.go 2025-11-01 14:20:59.000000000 +0100 +++ new/doggo-1.1.3/internal/app/nameservers.go 2025-12-20 15:05:13.000000000 +0100 @@ -261,6 +261,40 @@ return ip.To4() == nil } +// isPrivateIP checks if an IP address is in RFC 1918 private address space (IPv4) +// or RFC 4193 Unique Local Address space (IPv6) +func isPrivateIP(ipStr string) bool { + ip := net.ParseIP(ipStr) + if ip == nil { + return false + } + + // IPv4 RFC 1918 ranges + if ipv4 := ip.To4(); ipv4 != nil { + // 10.0.0.0/8 + if ipv4[0] == 10 { + return true + } + // 172.16.0.0/12 + if ipv4[0] == 172 && ipv4[1] >= 16 && ipv4[1] <= 31 { + return true + } + // 192.168.0.0/16 + if ipv4[0] == 192 && ipv4[1] == 168 { + return true + } + return false + } + + // IPv6 Unique Local Address (ULA) - RFC 4193 + // fd00::/8 range + if len(ip) == 16 && ip[0] == 0xfd { + return true + } + + return false +} + // filterNameserversByIPVersion filters nameservers based on IPv4/IPv6 flags func filterNameserversByIPVersion(servers []string, useIPv4, useIPv6 bool) []string { // If neither flag is set, return all servers @@ -324,6 +358,29 @@ } servers = append(servers, ns) + case "internal": + // Filter for nameservers with private IPs only (RFC 1918 / RFC 4193 ULA) + internalServers := make([]string, 0) + for _, srv := range dnsServers { + if isPrivateIP(srv) { + internalServers = append(internalServers, srv) + } + } + + // Return error if no internal servers found + if len(internalServers) == 0 { + return nil, ndots, search, fmt.Errorf("no internal (private IP) nameservers found in system configuration") + } + + // Return all internal servers + for _, s := range internalServers { + ns := models.Nameserver{ + Type: models.UDPResolver, + Address: net.JoinHostPort(s, models.DefaultUDPPort), + } + servers = append(servers, ns) + } + default: // Default behaviour is to load all nameservers. for _, s := range dnsServers { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/doggo-1.1.2/internal/app/output.go new/doggo-1.1.3/internal/app/output.go --- old/doggo-1.1.2/internal/app/output.go 2025-11-01 14:20:59.000000000 +0100 +++ new/doggo-1.1.3/internal/app/output.go 2025-12-20 15:05:13.000000000 +0100 @@ -81,6 +81,8 @@ Symbols: tw.NewSymbols(tw.StyleLight), }), tablewriter.WithPadding(tw.Padding{Left: "", Right: " ", Overwrite: true}), + tablewriter.WithRowAutoWrap(tw.WrapNormal), + tablewriter.WithRowMaxWidth(30), tablewriter.WithHeaderAlignment(tw.AlignLeft), ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/doggo-1.1.2/internal/app/questions.go new/doggo-1.1.3/internal/app/questions.go --- old/doggo-1.1.2/internal/app/questions.go 2025-11-01 14:20:59.000000000 +0100 +++ new/doggo-1.1.3/internal/app/questions.go 2025-12-20 15:05:13.000000000 +0100 @@ -16,8 +16,14 @@ if app.QueryFlags.QueryAny { app.QueryFlags.QTypes = models.GetCommonRecordTypes() } else if len(app.QueryFlags.QTypes) == 0 { - app.QueryFlags.QTypes = append(app.QueryFlags.QTypes, "A") - app.QueryFlags.QTypes = append(app.QueryFlags.QTypes, "AAAA") + if app.QueryFlags.UseIPv4 { + app.QueryFlags.QTypes = append(app.QueryFlags.QTypes, "A") + } else if app.QueryFlags.UseIPv6 { + app.QueryFlags.QTypes = append(app.QueryFlags.QTypes, "AAAA") + } else { + app.QueryFlags.QTypes = append(app.QueryFlags.QTypes, "A") + app.QueryFlags.QTypes = append(app.QueryFlags.QTypes, "AAAA") + } } if len(app.QueryFlags.QClasses) == 0 { app.QueryFlags.QClasses = append(app.QueryFlags.QClasses, "IN") diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/doggo-1.1.2/pkg/config/config_darwin.go new/doggo-1.1.3/pkg/config/config_darwin.go --- old/doggo-1.1.2/pkg/config/config_darwin.go 1970-01-01 01:00:00.000000000 +0100 +++ new/doggo-1.1.3/pkg/config/config_darwin.go 2025-12-20 15:05:13.000000000 +0100 @@ -0,0 +1,219 @@ +// +build darwin + +package config + +import ( + "bytes" + "fmt" + "net" + "os/exec" + "regexp" + "strconv" + "strings" + + "github.com/miekg/dns" +) + +// scutilResolver represents a parsed resolver from scutil --dns output +type scutilResolver struct { + number int + nameservers []string + domain string + searchDomains []string + options []string +} + +// GetDefaultServers retrieves DNS configuration from macOS SystemConfiguration +// by parsing the output of 'scutil --dns'. Falls back to /etc/resolv.conf on failure. +func GetDefaultServers() ([]string, int, []string, error) { + // Try scutil first + resolvers, ndots, search, err := getResolversFromScutil() + if err != nil { + // Fallback to /etc/resolv.conf + return fallbackToResolvConf() + } + + return resolvers, ndots, search, nil +} + +// getResolversFromScutil executes scutil --dns and parses the output +func getResolversFromScutil() ([]string, int, []string, error) { + // Execute scutil --dns + cmd := exec.Command("scutil", "--dns") + var stdout bytes.Buffer + cmd.Stdout = &stdout + + if err := cmd.Run(); err != nil { + return nil, 0, nil, fmt.Errorf("scutil execution failed: %w", err) + } + + output := stdout.String() + if len(strings.TrimSpace(output)) == 0 { + return nil, 0, nil, fmt.Errorf("scutil returned empty output") + } + + // Parse the output + resolvers, err := parseScutilOutput(output) + if err != nil { + return nil, 0, nil, fmt.Errorf("failed to parse scutil output: %w", err) + } + + // Filter out mDNS resolvers + validResolvers := make([]scutilResolver, 0) + for _, r := range resolvers { + if !isMDNS(r) && len(r.nameservers) > 0 { + validResolvers = append(validResolvers, r) + } + } + + if len(validResolvers) == 0 { + return nil, 0, nil, fmt.Errorf("no valid resolvers found") + } + + // Aggregate nameservers from all valid resolvers + // This allows the "internal" strategy to find domain-specific corporate DNS servers + nameservers := make([]string, 0) + seen := make(map[string]bool) + + for _, resolver := range validResolvers { + for _, ns := range resolver.nameservers { + ip := net.ParseIP(ns) + // Skip link-local and duplicates + if isUnicastLinkLocal(ip) || seen[ns] { + continue + } + nameservers = append(nameservers, ns) + seen[ns] = true + } + } + + // Aggregate search domains from all valid resolvers + searchDomains := aggregateSearchDomains(validResolvers) + + // ndots: try to read from /etc/resolv.conf, default to 1 + ndots := 1 + if cfg, err := dns.ClientConfigFromFile("/etc/resolv.conf"); err == nil { + ndots = cfg.Ndots + } + + return nameservers, ndots, searchDomains, nil +} + +// parseScutilOutput parses the output of scutil --dns +func parseScutilOutput(output string) ([]scutilResolver, error) { + lines := strings.Split(output, "\n") + resolvers := make([]scutilResolver, 0) + + var current *scutilResolver + resolverRe := regexp.MustCompile(`^resolver #(\d+)`) + nameserverRe := regexp.MustCompile(`^\s+nameserver\[\d+\]\s*:\s*(.+)`) + domainRe := regexp.MustCompile(`^\s+domain\s*:\s*(.+)`) + searchDomainRe := regexp.MustCompile(`^\s+search domain\[\d+\]\s*:\s*(.+)`) + optionsRe := regexp.MustCompile(`^\s+options\s*:\s*(.+)`) + + for _, line := range lines { + // Check for resolver start + if matches := resolverRe.FindStringSubmatch(line); matches != nil { + if current != nil { + resolvers = append(resolvers, *current) + } + num, _ := strconv.Atoi(matches[1]) + current = &scutilResolver{ + number: num, + nameservers: make([]string, 0), + searchDomains: make([]string, 0), + options: make([]string, 0), + } + continue + } + + if current == nil { + continue + } + + // Parse nameserver + if matches := nameserverRe.FindStringSubmatch(line); matches != nil { + current.nameservers = append(current.nameservers, strings.TrimSpace(matches[1])) + continue + } + + // Parse domain + if matches := domainRe.FindStringSubmatch(line); matches != nil { + current.domain = strings.TrimSpace(matches[1]) + continue + } + + // Parse search domain + if matches := searchDomainRe.FindStringSubmatch(line); matches != nil { + current.searchDomains = append(current.searchDomains, strings.TrimSpace(matches[1])) + continue + } + + // Parse options + if matches := optionsRe.FindStringSubmatch(line); matches != nil { + opts := strings.Fields(strings.TrimSpace(matches[1])) + current.options = append(current.options, opts...) + continue + } + } + + // Don't forget the last resolver + if current != nil { + resolvers = append(resolvers, *current) + } + + return resolvers, nil +} + +// isMDNS checks if a resolver is for mDNS (.local) +func isMDNS(r scutilResolver) bool { + for _, opt := range r.options { + if opt == "mdns" { + return true + } + } + return false +} + +// aggregateSearchDomains collects search domains from all resolvers +func aggregateSearchDomains(resolvers []scutilResolver) []string { + seen := make(map[string]bool) + result := make([]string, 0) + + for _, r := range resolvers { + // Add domain if present + if r.domain != "" && !seen[r.domain] { + result = append(result, r.domain) + seen[r.domain] = true + } + + // Add search domains + for _, sd := range r.searchDomains { + if !seen[sd] { + result = append(result, sd) + seen[sd] = true + } + } + } + + return result +} + +// fallbackToResolvConf falls back to the traditional /etc/resolv.conf +func fallbackToResolvConf() ([]string, int, []string, error) { + cfg, err := dns.ClientConfigFromFile("/etc/resolv.conf") + if err != nil { + return nil, 0, nil, err + } + + servers := make([]string, 0) + for _, server := range cfg.Servers { + ip := net.ParseIP(server) + if isUnicastLinkLocal(ip) { + continue + } + servers = append(servers, server) + } + + return servers, cfg.Ndots, cfg.Search, nil +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/doggo-1.1.2/pkg/config/config_unix.go new/doggo-1.1.3/pkg/config/config_unix.go --- old/doggo-1.1.2/pkg/config/config_unix.go 2025-11-01 14:20:59.000000000 +0100 +++ new/doggo-1.1.3/pkg/config/config_unix.go 2025-12-20 15:05:13.000000000 +0100 @@ -1,4 +1,4 @@ -// +build !windows +// +build !windows,!darwin package config diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/doggo-1.1.2/web/api.go new/doggo-1.1.3/web/api.go --- old/doggo-1.1.2/web/api.go 2025-11-01 14:20:59.000000000 +0100 +++ new/doggo-1.1.3/web/api.go 2025-12-20 15:05:13.000000000 +0100 @@ -23,7 +23,9 @@ //go:embed assets/* assetsDir embed.FS //go:embed index.html - html []byte + indexHTML []byte + //go:embed faq.html + faqHTML []byte ) func main() { @@ -51,7 +53,11 @@ }) r.Get("/", func(w http.ResponseWriter, r *http.Request) { w.Header().Add("Content-Type", "text/html") - w.Write(html) + w.Write(indexHTML) + }) + r.Get("/faq", func(w http.ResponseWriter, r *http.Request) { + w.Header().Add("Content-Type", "text/html") + w.Write(faqHTML) }) // API Handlers. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/doggo-1.1.2/web/assets/style.css new/doggo-1.1.3/web/assets/style.css --- old/doggo-1.1.2/web/assets/style.css 2025-11-01 14:20:59.000000000 +0100 +++ new/doggo-1.1.3/web/assets/style.css 2025-12-20 15:05:13.000000000 +0100 @@ -20,6 +20,14 @@ font-size: 1.3rem; font-weight: bold; color: var(--accent); + margin: 0; +} + +/* Page Title (for subpages like FAQ) */ +.page-title { + text-align: center; + color: var(--accent); + margin-bottom: 30px; } .terminal-menu ul { @@ -252,6 +260,38 @@ font-style: italic; } +/* FAQ Section */ +.faq-section { + margin-top: 30px; + margin-bottom: 30px; +} + +.faq-section h2 { + text-align: center; + margin-bottom: 25px; + color: var(--accent); +} + +.faq-list { + max-width: 800px; + margin: 0 auto; +} + +.faq-item { + margin-bottom: 10px; +} + +.faq-item summary { + padding: 15px; + margin-bottom: 0; +} + +.faq-item p { + padding: 0 15px 15px 15px; + margin: 0; + color: color-mix(in srgb, var(--foreground) 80%, transparent); +} + /* Footer */ .footer-card { margin-top: 40px; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/doggo-1.1.2/web/faq.html new/doggo-1.1.3/web/faq.html --- old/doggo-1.1.2/web/faq.html 1970-01-01 01:00:00.000000000 +0100 +++ new/doggo-1.1.3/web/faq.html 2025-12-20 15:05:13.000000000 +0100 @@ -0,0 +1,240 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + + <!-- Primary Meta Tags --> + <title>FAQ - Doggo DNS | DNS Lookup Tool Questions & Answers</title> + <meta name="title" content="FAQ - Doggo DNS | DNS Lookup Tool Questions & Answers"> + <meta name="description" content="Frequently asked questions about Doggo DNS lookup tool. Learn about DNS over HTTPS, TLS, QUIC, DNS record types, and how to use Doggo for DNS queries."> + <meta name="keywords" content="dns lookup faq, dns questions, what is dns, dns over https, doh explained, dns over tls, dot, dns record types, A record, AAAA record, MX record, CNAME, doggo dns help"> + <meta name="author" content="Karan Sharma"> + <meta name="robots" content="index, follow"> + <link rel="canonical" href="https://doggo.mrkaran.dev/faq"> + + <!-- Open Graph / Facebook --> + <meta property="og:type" content="website"> + <meta property="og:url" content="https://doggo.mrkaran.dev/faq"> + <meta property="og:title" content="FAQ - Doggo DNS | DNS Lookup Tool"> + <meta property="og:description" content="Frequently asked questions about Doggo DNS lookup tool. Learn about DNS protocols, record types, and more."> + <meta property="og:image" content="https://doggo.mrkaran.dev/assets/og-image.png"> + <meta property="og:site_name" content="Doggo DNS"> + + <!-- Twitter --> + <meta name="twitter:card" content="summary_large_image"> + <meta name="twitter:url" content="https://doggo.mrkaran.dev/faq"> + <meta name="twitter:title" content="FAQ - Doggo DNS | DNS Lookup Tool"> + <meta name="twitter:description" content="Frequently asked questions about Doggo DNS lookup tool. Learn about DNS protocols, record types, and more."> + <meta name="twitter:image" content="https://doggo.mrkaran.dev/assets/og-image.png"> + <meta name="twitter:creator" content="@mrkaran_"> + + <!-- Favicon --> + <link rel="icon" type="image/x-icon" href="assets/favicon.ico"> + <link rel="apple-touch-icon" href="assets/apple-touch-icon.png"> + + <!-- Schema.org FAQ Page --> + <script type="application/ld+json"> + { + "@context": "https://schema.org", + "@type": "FAQPage", + "mainEntity": [ + { + "@type": "Question", + "name": "What is Doggo DNS?", + "acceptedAnswer": { + "@type": "Answer", + "text": "Doggo DNS is a free online DNS lookup tool that allows you to query DNS records for any domain. It supports multiple DNS record types including A, AAAA, MX, CNAME, TXT, NS, SOA, PTR, SRV, and CAA records. It's available as both a web interface and a command-line tool." + } + }, + { + "@type": "Question", + "name": "What is a DNS lookup?", + "acceptedAnswer": { + "@type": "Answer", + "text": "A DNS lookup queries the Domain Name System to translate domain names (like example.com) into IP addresses. It retrieves various DNS records including A records (IPv4 addresses), AAAA records (IPv6 addresses), MX records (mail servers), CNAME records (aliases), TXT records (text information), and more." + } + }, + { + "@type": "Question", + "name": "What DNS protocols does Doggo support?", + "acceptedAnswer": { + "@type": "Answer", + "text": "Doggo supports DNS over HTTPS (DoH), DNS over TLS (DoT), DNS over QUIC (DoQ), as well as traditional UDP and TCP DNS queries. These encrypted protocols provide better privacy and security compared to standard DNS." + } + }, + { + "@type": "Question", + "name": "What is DNS over HTTPS (DoH)?", + "acceptedAnswer": { + "@type": "Answer", + "text": "DNS over HTTPS (DoH) encrypts DNS queries using the HTTPS protocol. This prevents eavesdropping and manipulation of DNS data by ISPs or attackers, improving privacy and security compared to traditional unencrypted DNS queries." + } + }, + { + "@type": "Question", + "name": "What is DNS over TLS (DoT)?", + "acceptedAnswer": { + "@type": "Answer", + "text": "DNS over TLS (DoT) encrypts DNS queries using the TLS protocol on port 853. Like DoH, it provides privacy and security for DNS queries, but uses a dedicated port rather than blending in with regular HTTPS traffic." + } + }, + { + "@type": "Question", + "name": "What is DNS over QUIC (DoQ)?", + "acceptedAnswer": { + "@type": "Answer", + "text": "DNS over QUIC (DoQ) is the newest encrypted DNS protocol that uses the QUIC transport protocol. It offers lower latency than DoT and DoH because QUIC establishes connections faster and handles packet loss better." + } + }, + { + "@type": "Question", + "name": "Which DNS providers are available in Doggo?", + "acceptedAnswer": { + "@type": "Answer", + "text": "Doggo supports multiple DNS providers including Cloudflare (1.1.1.1), Google (8.8.8.8), Quad9 (9.9.9.9), AdGuard, Mullvad, Control D, DNS0.eu, OpenDNS, CleanBrowsing, and custom DNS servers." + } + }, + { + "@type": "Question", + "name": "Which DNS server should I use?", + "acceptedAnswer": { + "@type": "Answer", + "text": "Popular choices include Cloudflare (1.1.1.1) for speed and privacy, Google (8.8.8.8) for reliability, Quad9 (9.9.9.9) for security with malware blocking, and AdGuard for ad-blocking. Each provider has different privacy policies and features." + } + }, + { + "@type": "Question", + "name": "How is Doggo different from dig or nslookup?", + "acceptedAnswer": { + "@type": "Answer", + "text": "Doggo provides a modern, user-friendly interface with native support for encrypted DNS protocols (DoH, DoT, DoQ) that traditional tools like dig and nslookup don't support out of the box. It's available both as a web interface and command-line tool, with colorful output and JSON support." + } + }, + { + "@type": "Question", + "name": "What DNS record types does Doggo support?", + "acceptedAnswer": { + "@type": "Answer", + "text": "Doggo supports all common DNS record types including: A (IPv4 address), AAAA (IPv6 address), CNAME (canonical name/alias), MX (mail exchange), NS (nameserver), TXT (text records), SOA (start of authority), PTR (pointer/reverse DNS), SRV (service records), and CAA (certificate authority authorization)." + } + }, + { + "@type": "Question", + "name": "Is Doggo DNS free to use?", + "acceptedAnswer": { + "@type": "Answer", + "text": "Yes, Doggo DNS is completely free and open source. You can use the web interface without any registration, or install the command-line tool from GitHub. The source code is available under an open source license." + } + }, + { + "@type": "Question", + "name": "What are EDNS options in Doggo?", + "acceptedAnswer": { + "@type": "Answer", + "text": "EDNS (Extension Mechanisms for DNS) options allow advanced DNS queries. Doggo supports NSID (nameserver identifier), DNS cookies for security, padding for privacy, EDE (extended DNS errors) for detailed error information, and ECS (EDNS Client Subnet) for geolocation-aware responses." + } + } + ] + } + </script> + + <!-- Stylesheets --> + <link rel="stylesheet" href="assets/terminal.css"> + <link href="assets/style.css" rel="stylesheet"> +</head> +<body> +<div class="container"> + <div class="terminal-nav"> + <div class="terminal-logo"> + <div class="logo">🐶 doggo</div> + </div> + <nav class="terminal-menu"> + <ul vocab="https://schema.org/" typeof="BreadcrumbList"> + <li property="itemListElement" typeof="ListItem"><a href="/" property="item" typeof="WebPage"><span property="name">Home</span></a></li> + <li property="itemListElement" typeof="ListItem"><a href="https://github.com/mr-karan/doggo" property="item" typeof="WebPage"><span property="name">GitHub</span></a></li> + <li property="itemListElement" typeof="ListItem"><a href="https://doggo.mrkaran.dev/docs/" property="item" typeof="WebPage"><span property="name">Docs</span></a></li> + </ul> + </nav> + </div> + + <h1 class="page-title">Frequently Asked Questions</h1> + + <section class="faq-section"> + <h2>About Doggo DNS</h2> + <div class="faq-list"> + <details class="faq-item"> + <summary>What is Doggo DNS?</summary> + <p>Doggo DNS is a free online DNS lookup tool that allows you to query DNS records for any domain. It supports multiple DNS record types including A, AAAA, MX, CNAME, TXT, NS, SOA, PTR, SRV, and CAA records. It's available as both a web interface and a command-line tool.</p> + </details> + <details class="faq-item"> + <summary>How is Doggo different from dig or nslookup?</summary> + <p>Doggo provides a modern, user-friendly interface with native support for encrypted DNS protocols (DoH, DoT, DoQ) that traditional tools like dig and nslookup don't support out of the box. It's available both as a web interface and command-line tool, with colorful output and JSON support.</p> + </details> + <details class="faq-item"> + <summary>Is Doggo DNS free to use?</summary> + <p>Yes, Doggo DNS is completely free and open source. You can use the web interface without any registration, or install the command-line tool from GitHub. The source code is available under an open source license.</p> + </details> + </div> + </section> + + <section class="faq-section"> + <h2>DNS Basics</h2> + <div class="faq-list"> + <details class="faq-item"> + <summary>What is a DNS lookup?</summary> + <p>A DNS lookup queries the Domain Name System to translate domain names (like example.com) into IP addresses. It retrieves various DNS records including A records (IPv4 addresses), AAAA records (IPv6 addresses), MX records (mail servers), CNAME records (aliases), TXT records (text information), and more.</p> + </details> + <details class="faq-item"> + <summary>What DNS record types does Doggo support?</summary> + <p>Doggo supports all common DNS record types including: A (IPv4 address), AAAA (IPv6 address), CNAME (canonical name/alias), MX (mail exchange), NS (nameserver), TXT (text records), SOA (start of authority), PTR (pointer/reverse DNS), SRV (service records), and CAA (certificate authority authorization).</p> + </details> + <details class="faq-item"> + <summary>Which DNS server should I use?</summary> + <p>Popular choices include Cloudflare (1.1.1.1) for speed and privacy, Google (8.8.8.8) for reliability, Quad9 (9.9.9.9) for security with malware blocking, and AdGuard for ad-blocking. Each provider has different privacy policies and features.</p> + </details> + <details class="faq-item"> + <summary>Which DNS providers are available in Doggo?</summary> + <p>Doggo supports multiple DNS providers including Cloudflare (1.1.1.1), Google (8.8.8.8), Quad9 (9.9.9.9), AdGuard, Mullvad, Control D, DNS0.eu, OpenDNS, CleanBrowsing, and custom DNS servers.</p> + </details> + </div> + </section> + + <section class="faq-section"> + <h2>DNS Protocols</h2> + <div class="faq-list"> + <details class="faq-item"> + <summary>What DNS protocols does Doggo support?</summary> + <p>Doggo supports DNS over HTTPS (DoH), DNS over TLS (DoT), DNS over QUIC (DoQ), as well as traditional UDP and TCP DNS queries. These encrypted protocols provide better privacy and security compared to standard DNS.</p> + </details> + <details class="faq-item"> + <summary>What is DNS over HTTPS (DoH)?</summary> + <p>DNS over HTTPS (DoH) encrypts DNS queries using the HTTPS protocol. This prevents eavesdropping and manipulation of DNS data by ISPs or attackers, improving privacy and security compared to traditional unencrypted DNS queries.</p> + </details> + <details class="faq-item"> + <summary>What is DNS over TLS (DoT)?</summary> + <p>DNS over TLS (DoT) encrypts DNS queries using the TLS protocol on port 853. Like DoH, it provides privacy and security for DNS queries, but uses a dedicated port rather than blending in with regular HTTPS traffic.</p> + </details> + <details class="faq-item"> + <summary>What is DNS over QUIC (DoQ)?</summary> + <p>DNS over QUIC (DoQ) is the newest encrypted DNS protocol that uses the QUIC transport protocol. It offers lower latency than DoT and DoH because QUIC establishes connections faster and handles packet loss better.</p> + </details> + </div> + </section> + + <section class="faq-section"> + <h2>Advanced Features</h2> + <div class="faq-list"> + <details class="faq-item"> + <summary>What are EDNS options in Doggo?</summary> + <p>EDNS (Extension Mechanisms for DNS) options allow advanced DNS queries. Doggo supports NSID (nameserver identifier), DNS cookies for security, padding for privacy, EDE (extended DNS errors) for detailed error information, and ECS (EDNS Client Subnet) for geolocation-aware responses.</p> + </details> + </div> + </section> + + <div class="terminal-card footer-card"> + <p>Made by <a href="https://mrkaran.dev">karan</a> · <a href="https://github.com/mr-karan/doggo">GitHub</a></p> + </div> +</div> +</body> +</html> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/doggo-1.1.2/web/index.html new/doggo-1.1.3/web/index.html --- old/doggo-1.1.2/web/index.html 2025-11-01 14:20:59.000000000 +0100 +++ new/doggo-1.1.3/web/index.html 2025-12-20 15:05:13.000000000 +0100 @@ -1,9 +1,124 @@ <!DOCTYPE html> -<html> +<html lang="en"> <head> - <title>Doggo DNS</title> <meta charset="utf-8"> - <meta name="viewport" content="initial-scale=1, maximum-scale=1"> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + + <!-- Primary Meta Tags --> + <title>Doggo DNS - Free Online DNS Lookup Tool | Query A, AAAA, MX, CNAME, TXT Records</title> + <meta name="title" content="Doggo DNS - Free Online DNS Lookup Tool | Query A, AAAA, MX, CNAME, TXT Records"> + <meta name="description" content="Free online DNS lookup tool. Query DNS records (A, AAAA, MX, CNAME, TXT, NS, SOA, PTR, SRV, CAA) using DNS over HTTPS, TLS, QUIC, UDP and TCP. Fast, modern alternative to dig and nslookup."> + <meta name="keywords" content="dns lookup, dns checker, online dig, nslookup, dns query, nameserver lookup, A record, AAAA record, MX record, CNAME record, TXT record, NS record, SOA record, PTR record, dns over https, doh, dns over tls, dot, dns over quic, doq, domain lookup, dns tool, dns propagation, dns records"> + <meta name="author" content="Karan Sharma"> + <meta name="robots" content="index, follow"> + <link rel="canonical" href="https://doggo.mrkaran.dev/"> + + <!-- Open Graph / Facebook --> + <meta property="og:type" content="website"> + <meta property="og:url" content="https://doggo.mrkaran.dev/"> + <meta property="og:title" content="Doggo DNS - Free Online DNS Lookup Tool"> + <meta property="og:description" content="Free online DNS lookup tool. Query DNS records using DNS over HTTPS, TLS, QUIC, UDP and TCP. Fast, modern alternative to dig and nslookup."> + <meta property="og:image" content="https://doggo.mrkaran.dev/assets/og-image.png"> + <meta property="og:site_name" content="Doggo DNS"> + + <!-- Twitter --> + <meta name="twitter:card" content="summary_large_image"> + <meta name="twitter:url" content="https://doggo.mrkaran.dev/"> + <meta name="twitter:title" content="Doggo DNS - Free Online DNS Lookup Tool"> + <meta name="twitter:description" content="Free online DNS lookup tool. Query DNS records using DNS over HTTPS, TLS, QUIC, UDP and TCP. Fast, modern alternative to dig and nslookup."> + <meta name="twitter:image" content="https://doggo.mrkaran.dev/assets/og-image.png"> + <meta name="twitter:creator" content="@mrkaran_"> + + <!-- Favicon --> + <link rel="icon" type="image/x-icon" href="assets/favicon.ico"> + <link rel="apple-touch-icon" href="assets/apple-touch-icon.png"> + + <!-- Schema.org Structured Data --> + <script type="application/ld+json"> + { + "@context": "https://schema.org", + "@type": "WebApplication", + "name": "Doggo DNS", + "url": "https://doggo.mrkaran.dev/", + "description": "Free online DNS lookup tool. Query DNS records (A, AAAA, MX, CNAME, TXT, NS, SOA, PTR, SRV, CAA) using DNS over HTTPS, TLS, QUIC, UDP and TCP.", + "applicationCategory": "DeveloperApplication", + "operatingSystem": "Any", + "offers": { + "@type": "Offer", + "price": "0", + "priceCurrency": "USD" + }, + "author": { + "@type": "Person", + "name": "Karan Sharma", + "url": "https://mrkaran.dev" + }, + "featureList": [ + "DNS over HTTPS (DoH)", + "DNS over TLS (DoT)", + "DNS over QUIC (DoQ)", + "Multiple DNS providers", + "All DNS record types", + "DNSSEC validation", + "EDNS support" + ] + } + </script> + <script type="application/ld+json"> + { + "@context": "https://schema.org", + "@type": "WebSite", + "url": "https://doggo.mrkaran.dev/", + "name": "Doggo DNS", + "potentialAction": { + "@type": "SearchAction", + "target": "https://doggo.mrkaran.dev/?q={search_term_string}", + "query-input": "required name=search_term_string" + } + } + </script> + <script type="application/ld+json"> + { + "@context": "https://schema.org", + "@type": "FAQPage", + "mainEntity": [ + { + "@type": "Question", + "name": "What is Doggo DNS?", + "acceptedAnswer": { + "@type": "Answer", + "text": "Doggo DNS is a free online DNS lookup tool that allows you to query DNS records for any domain. It supports multiple DNS record types including A, AAAA, MX, CNAME, TXT, NS, SOA, PTR, SRV, and CAA records." + } + }, + { + "@type": "Question", + "name": "What DNS protocols does Doggo support?", + "acceptedAnswer": { + "@type": "Answer", + "text": "Doggo supports DNS over HTTPS (DoH), DNS over TLS (DoT), DNS over QUIC (DoQ), as well as traditional UDP and TCP DNS queries." + } + }, + { + "@type": "Question", + "name": "Which DNS providers are available?", + "acceptedAnswer": { + "@type": "Answer", + "text": "Doggo supports multiple DNS providers including Cloudflare (1.1.1.1), Google (8.8.8.8), Quad9 (9.9.9.9), AdGuard, Mullvad, Control D, DNS0.eu, OpenDNS, CleanBrowsing, and custom DNS servers." + } + }, + { + "@type": "Question", + "name": "Is Doggo DNS free to use?", + "acceptedAnswer": { + "@type": "Answer", + "text": "Yes, Doggo DNS is completely free and open source. You can use the web interface or install the command-line tool from GitHub." + } + } + ] + } + </script> + + <!-- Stylesheets --> <link rel="stylesheet" href="assets/terminal.css"> <link href="assets/style.css" rel="stylesheet"> </head> @@ -15,6 +130,7 @@ </div> <nav class="terminal-menu"> <ul vocab="https://schema.org/" typeof="BreadcrumbList"> + <li property="itemListElement" typeof="ListItem"><a href="/faq" property="item" typeof="WebPage"><span property="name">FAQ</span></a></li> <li property="itemListElement" typeof="ListItem"><a href="https://github.com/mr-karan/doggo" property="item" typeof="WebPage"><span property="name">GitHub</span></a></li> <li property="itemListElement" typeof="ListItem"><a href="https://doggo.mrkaran.dev/docs/" property="item" typeof="WebPage"><span property="name">Docs</span></a></li> </ul> ++++++ doggo.obsinfo ++++++ --- /var/tmp/diff_new_pack.FvEFCP/_old 2025-12-22 22:51:55.455659938 +0100 +++ /var/tmp/diff_new_pack.FvEFCP/_new 2025-12-22 22:51:55.467660432 +0100 @@ -1,5 +1,5 @@ name: doggo -version: 1.1.2 -mtime: 1762003259 -commit: deea9773d44d72aae73d5b5f033e747306c51134 +version: 1.1.3 +mtime: 1766239513 +commit: 46a1de3ae6ee61267b678e7493a52657fde1bf74 ++++++ vendor.tar.xz ++++++ ++++ 140835 lines of diff (skipped)
