Total Pageviews

Sunday, 18 January 2026

用CaptiveDNS激活Nintendo Switch隐藏的网站浏览器



CaptiveDNS是一款开源本地 DNS 代理工具,基于YourFriendlyDNS开源项目,CaptiveDNS项目简化YourFriendlyDNS后,专门针对玩家的 Nintendo Switch设备,访问时即可激活Switch中隐藏的网站浏览器,让玩家可以自由上网并浏览网页!项目遵守GPL2.0开源协议。

CaptiveDNS项目原理是DNS 流量重定向与强制门户(Captive Portal),让 Switch 误认为当前网络需要进行认证才能访问英特网,类似酒店 Wi-Fi,会弹出浏览器进行确认。用户使用时,只需要配置Switch的DNS,即可触发Switch隐藏版浏览器。

源代码:https://github.com/browseDNS/CaptiveDNS
 -------------------------------------------------------------


CaptiveDNS

An app to help display a captive portal browser to other devices on the network via DNS. Run this app on your computer, enter the DNS in the target device settings, and the captive portal should be displayed.

This program is based on a stripped down verison of YourFriendlyDNS. YourFriendlyDNS contains many more advanced options for self-hosted DNS and HTTP servers, and should be used instead of CaptiveDNS in those use cases.

Download CaptiveDNS from on the Releases page. Nightly builds from the latest commits can be found here.

Screenshots

CaptiveDNS Window Screenshot CaptiveDNS Landing page

Captured Domains

If a captive portal test domain is missing here, please file an issue and it will be added to the redirection list.

ctest.cdn.nintendo.net
conntest.nintendowifi.net
detectportal.firefox.com
connectivitycheck.gstatic.com
connectivitycheck.android.com
clients1.google.com
clients3.google.com
captive.apple.com
ctest.p01.ctest.srv.nintendo.net
www.msftconnecttest.com

This list of domains cannot be configured within CaptiveDNS. To customize it further, check out YourFriendlyDNS.

Compiling

git clone git@github.com:BrowseDNS/CaptiveDNS.git
cd CaptiveDNS/CaptiveDNS
qmake
make
from  https://github.com/browseDNS/CaptiveDNS
----
A really awesome multi-platform (lin,win,mac,android) local caching and proxying dns server

YourFriendlyDNS

A really awesome multi-platform (lin,win,mac,android) local caching and proxying dns server!

GET LATEST VERSION HERE (v2.1.1): https://github.com/softwareengineer1/YourFriendlyDNS/releases YourFriendlyDNS v2.0 {Version 2.1.3}

  1. Timeout state improved (intermediary state to confirm timeout)

YourFriendlyDNS Auto Sourcer and Stamp Converter {Version 2.1.2}

  1. Added a disconnected / no response timeout state, so if no responses are received (maybe disconnected/offline) the message queue shouldn’t drown in unhandled requests.

  2. Added Auto Sourcer + Stamp Converter! -> Auto Sourcer, already has the main three available and known sources preloaded by default (and a source with my providers during testing, demonstrating the ease of adding or making/using your own provider sources resources), and you can easily add further sources if/when they’re available or change web locations. HTTPS (port 443) and HTTP (port 80) sources locations supported.

Much more user-friendly! Now you don’t need to manually look at provider sources and pick and choose which ones to then copy and paste one by one into the application… You can instead load (from saved once retrieved recently) or download/update source lists from their urls that are in the standard simple format, select them to decode and see what server info is actually contained, change server parameter to re-encode the server info back to stamp form and finally click “ADD IT!” button to add to your dns providers / dns servers list!

The stamp converter supports protocols v1,v2,v3 (v0 is just plain dns, it can read them but won’t use them if DNSCrypt is enabled)

  1. Reduced DoH + DoTLS request handling objects into one object that handles both (they were so similar, I realized I could just make them one type)

  2. Fixed some small things, noticed incorrect while adding this (like v2 or v3 stamp reading when no hashes provided, if the first hash’s length is zero just skip trying to read hashes since none were provided)

{Version 2.1.1}

  1. DNS over TLS fixed and working properly now! -> The provided hostname doesn’t necessarily resolve to the right ip to use for DoTLS. Since QSSlSocket inherits from QTcpSocket, I can therefore use connectToHost rather than connectToHostEncrypted (which doesn’t take an ip, only a hostname) and use startEncryption function manually. Using the provided IP address in the stamp if there is one now correctly connects to the DoTLS provider! Also added the 2 byte length prefix that I forgot initially. So now both DNS over HTTPS and DNS over TLS work! :)
  2. Like noted in the dnscrypt stamp specification, if there is no IP address provided or its just a port, it’ll use the hostname instead (a stamp like this should indicate the hostname will resolve to the correct ip to use) and use the port from either place it’s located. So even in that edge case it’ll still work properly!
  3. Alright what else is there to do now? Perhaps have a list of DNSCrypt provider sources to auto download from (might as well since we have a TLS stack now) and let you easily select and add them not requiring manual copying and pasting anymore. Also an inbuilt stamp converter to create stamps from specified server info, or vice versa. (Like dnscrypt.info’s but also doing protocol v3 [I had to manually change the start to “sdns://Aw” (protocol version 3) in my testing of v3 servers])
  4. Looking good now! :)

{Version 2.1}

  1. DNS over HTTPS / DoH support added!
  2. DNS over TLS / DoTLS support added! Note: If using DoH and/or DoTLS providers you should set a dedicated v1 DNSCrypt provider to use to resolve the hosts of DoH and DoTLS providers themselves! :)
  3. Props info now displayed as well for last used provider
  4. Look for the new version 2.1 on the releases page shortly and checkout the new code now! :)

{Version 2.0.7}

  1. Better handling of multiple DNSCrypt providers
  2. Last DNSC provider used is displayed on the main window
  3. PlainDNS can specify a port now too, ex. 208.67.222.222:53 (when DNSCrypt is disabled)
  4. Fixed too small of a font used on macOS ->Now I’m truly ready to add protocolVersion 2 & 3 support

{==VERSION 2.0==} -> Major milestone!

  1. DNSCrypt now supported! Very happy I made it this far! You locally send it standard plaintext requests as usual and it transparently dnscrypts them for you using the dnscrypt providers you’ve specified. Now your queries aren’t going over the wire as plaintext anymore! Enabled by default! No fallback (must disable DNSCrypt to use plaintext dns servers again)
  2. Can enable new key pair per request otherwise a new key pair is made on every newly validated certificate for that provider.

Just add DNSCrypt stamps in settings to the list of dns servers and make sure enable DNSCrypt checkbox is checked to use them! ex. "sdns://AQAAAAAAAAAADjIwOC42Ny4yMjAuMjIwILc1EUAgbyJdPivYItf9aR6hwzzI1maNDL4Ev6vKQ_t5GzIuZG5zY3J5cHQtY2VydC5vcGVuZG5zLmNvbQ" Corresponds to: Protocol version 0x0001 read -> DNSCrypt! Provider using IPv4 address: "208.67.220.220" Provider PubKey aquired... len: 32 Provider name: "2.dnscrypt-cert.opendns.com" len: 27

Currently protocol version 2 (DoH / DNS over HTTPS) isn’t implemented yet, so if adding them they won’t be used at the moment. I do like how all the necessary information is all contained in the base64 encoded string, so I adopted the stamps as well. No auto sourcing them for now though, manually add them from here: https://github.com/jedisct1/dnscrypt-proxy/wiki/DNS-server-sources

  1. IPv6 has been supported without me realizing it since I’ve supported every record type (not just A)! So now I’ve made it also listen on ipv6 addresses as well as ipv4 addresses so now you can not only get ipv4/ipv6 addresses connecting to the server over ipv4 but also connecting to it over ipv6 now as well. (You can set it as an ipv6 dns server)

  2. Added a cache viewer

Mac + Windows + Android v2.0 builds are now available!

{Version 1.1.9}

  1. Another slight reduction (adding and using getListEntry similar to when I added getCachedEntry)
  2. Fixed multiple cache entries for the same domain if it was requested with changed cases -> (ex. gItHuB.com instead of github.com) ->Despite checking each domain with a case insensitive match with wildcard support I still inserted into the cache and checked against it an a case sensitive way. ->To solve it I changed this one line: “dns.domainString = fullname;” to “dns.domainString = fullname.toLower();” which is upon first interpreting the domain. ->Now if an altered case domain name is given (ex. “ExAMpLE.CoM” it’s always seen as “example.com”, anywhere in the application after it’s first interpreted)
  3. Also fixed customized dns and http server ports not actually being used by preloading the dns and http server ports from the config file right away, and reading the other info from it later. -> I noticed this when setting the dns and http server ports above 1024 saving it and running it not as root and it still attempted to bind to port 53 and 80 ignoring the config (because I was reading it too late after the servers were already initialized and started) -> Now you can run it as non root, if you have and prefer some other way to redirect ports 53 and 80 to it (like iptables which I use on android in here [that itself still requires root though]) or if you can specify a port for your dns server on whatever device you’re using and obviously you can for http. (But it won’t really work as an auto captive portal in that case)

from  https://github.com/softwareengineer1/YourFriendlyDNS/

下载地址: https://github.com/softwareengineer1/YourFriendlyDNS/releases

      

No comments:

Post a Comment