Last active
March 5, 2025 08:30
-
-
Save cs8425/107e01a0652f1f1f6e033b5b68364b5e to your computer and use it in GitHub Desktop.
Revisions
-
cs8425 revised this gist
Mar 21, 2019 . 1 changed file with 31 additions and 10 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -46,16 +46,30 @@ type resolverConfig struct { dnsConfig *dnsConfig // parsed resolv.conf structure used in lookups } //go:linkname (*resolverConfig).tryUpdate net.(*resolverConfig).tryUpdate func (conf *resolverConfig) tryUpdate(name string) // need to put a empty .s file func setDefaultNS(addrs []string, loadFromSystem bool) { if resolvConf.dnsConfig == nil { resolvConf.tryUpdate("") } if loadFromSystem { now := time.Now() resolvConf.lastChecked = now.Add(-6 * time.Second) resolvConf.dnsConfig.mtime = now } resolvConf.dnsConfig.servers = addrs defaultNS = addrs } // -------------- func test() { ips, err := net.LookupIP("google.com") if err != nil { @@ -66,15 +80,22 @@ func test() { } func main() { // force use a non-exist DNS server setDefaultNS([]string{"127.0.0.1:5300"}, false) test() // error fmt.Println("------------------") // force use a list of DNS server setDefaultNS([]string{"8.8.8.8:53", "1.1.1.1:53"}, false) test() // ok fmt.Println("------------------") // set DNS & try reload from system config setDefaultNS([]string{"127.0.0.1:5300"}, true) // check & test net.defaultNS test() // ok fmt.Println("------------------") } -
cs8425 revised this gist
Mar 21, 2019 . 2 changed files with 46 additions and 27 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -11,6 +11,8 @@ import ( // DNS resolve workaround for android in pure go //go:linkname defaultNS net.defaultNS var defaultNS []string // need to keep sync with go version //go:linkname resolvConf net.resolvConf @@ -54,7 +56,6 @@ func setDefaultNS(addrs []string) { // -------------- func test() { ips, err := net.LookupIP("google.com") if err != nil { @@ -77,29 +78,3 @@ func main() { test() fmt.Println("------------------") } This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,44 @@ package main import ( "fmt" "net" _ "unsafe" ) // DNS resolve workaround for android in pure go // this only work before any Lookup call and net.dnsReadConfig() failed //go:linkname defaultNS net.defaultNS var defaultNS []string func setDefaultNS2(addrs []string) { defaultNS = addrs } // -------------- func test() { ips, err := net.LookupIP("google.com") if err != nil { fmt.Printf("Could not get IPs: %v\n", err) return } fmt.Println("IPs:", ips) } func main() { // print net.defaultNS fmt.Println("use DNS", defaultNS) //test() // should setup before any call!! fmt.Println("------------------") // set net.defaultNS setDefaultNS2([]string{"8.8.8.8:53", "1.1.1.1:53"}) // check & test net.defaultNS fmt.Println("use DNS", defaultNS) test() fmt.Println("------------------") } -
cs8425 revised this gist
Mar 21, 2019 . 1 changed file with 69 additions and 5 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -4,18 +4,57 @@ import ( "fmt" "net" "sync" "time" _ "unsafe" ) // DNS resolve workaround for android in pure go // need to keep sync with go version //go:linkname resolvConf net.resolvConf var resolvConf resolverConfig // copy from /src/net/dnsconfig_unix.go type dnsConfig struct { servers []string // server addresses (in host:port form) to use search []string // rooted suffixes to append to local name ndots int // number of dots in name to trigger absolute lookup timeout time.Duration // wait before giving up on a query, including retries attempts int // lost packets before giving up on server rotate bool // round robin among servers unknownOpt bool // anything unknown was encountered lookup []string // OpenBSD top-level database "lookup" order err error // any error that occurs during open of resolv.conf mtime time.Time // time of resolv.conf modification soffset uint32 // used by serverOffset } // copy from /src/net/dnsclient_unix.go type resolverConfig struct { initOnce sync.Once // guards init of resolverConfig // ch is used as a semaphore that only allows one lookup at a // time to recheck resolv.conf. ch chan struct{} // guards lastChecked and modTime lastChecked time.Time // last time resolv.conf was checked mu sync.RWMutex // protects dnsConfig dnsConfig *dnsConfig // parsed resolv.conf structure used in lookups } func setDefaultNS(addrs []string) { now := time.Now() resolvConf.dnsConfig.mtime = now resolvConf.lastChecked = now resolvConf.dnsConfig.servers = addrs defaultNS = addrs } // -------------- func test() { ips, err := net.LookupIP("google.com") if err != nil { @@ -26,16 +65,41 @@ func test() { } func main() { // test default test() fmt.Println("------------------") // set DNS setDefaultNS([]string{"8.8.8.8:53", "1.1.1.1:53"}) // check & test net.defaultNS fmt.Println("use DNS", defaultNS) test() fmt.Println("------------------") } // -------------- // this only work before any Lookup call and net.dnsReadConfig() failed //go:linkname defaultNS net.defaultNS var defaultNS []string func setDefaultNS2(addrs []string) { defaultNS = addrs } func main2() { // print net.defaultNS fmt.Println("use DNS", defaultNS) //test() // should setup before any call!! fmt.Println("------------------") // set net.defaultNS setDefaultNS2([]string{"8.8.8.8:53", "1.1.1.1:53"}) // check & test net.defaultNS fmt.Println("use DNS", defaultNS) test() fmt.Println("------------------") } -
cs8425 revised this gist
Mar 21, 2019 . 1 changed file with 1 addition and 8 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -4,7 +4,6 @@ import ( "fmt" "net" _ "unsafe" ) @@ -14,13 +13,7 @@ import ( var defaultNS []string func setDefaultNS(addrs []string) { defaultNS = addrs } func test() { -
cs8425 revised this gist
Mar 20, 2019 . 1 changed file with 4 additions and 4 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -13,8 +13,8 @@ import ( //go:linkname defaultNS net.defaultNS var defaultNS []string func setDefaultNS(addrs []string) { valuePtr := reflect.ValueOf(&defaultNS) v := valuePtr.Elem() v.Set(reflect.MakeSlice(v.Type(), len(addrs), len(addrs))) @@ -39,9 +39,9 @@ func main() { fmt.Println("------------------") // set net.defaultNS setDefaultNS([]string{"8.8.8.8:53", "1.1.1.1:53"}) // check & test net.defaultNS fmt.Println(defaultNS) test() fmt.Println("------------------") -
cs8425 revised this gist
Mar 20, 2019 . No changes.There are no files selected for viewing
-
cs8425 revised this gist
Mar 20, 2019 . 1 changed file with 1 addition and 1 deletion.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -8,7 +8,7 @@ import ( _ "unsafe" ) // DNS resolve workaround for android in pure go //go:linkname defaultNS net.defaultNS var defaultNS []string -
cs8425 revised this gist
Mar 20, 2019 . 1 changed file with 12 additions and 1 deletion.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -3,9 +3,9 @@ package main import ( "fmt" "net" "reflect" _ "unsafe" ) // DNS resolve work around for android in pure go @@ -23,15 +23,26 @@ func setSlice(arrPtr interface{}, addrs []string) { } } func test() { ips, err := net.LookupIP("google.com") if err != nil { fmt.Printf("Could not get IPs: %v\n", err) return } fmt.Println("IPs:", ips) } func main() { // print net.defaultNS fmt.Println(defaultNS) //test() // should setup before any call!! fmt.Println("------------------") // set net.defaultNS setSlice(&defaultNS, []string{"8.8.8.8:53", "1.1.1.1:53"}) // check net.defaultNS fmt.Println(defaultNS) test() fmt.Println("------------------") } -
cs8425 created this gist
Mar 20, 2019 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,37 @@ package main import ( "fmt" "reflect" _ "unsafe" _ "net" ) // DNS resolve work around for android in pure go //go:linkname defaultNS net.defaultNS var defaultNS []string func setSlice(arrPtr interface{}, addrs []string) { valuePtr := reflect.ValueOf(arrPtr) v := valuePtr.Elem() v.Set(reflect.MakeSlice(v.Type(), len(addrs), len(addrs))) for i, w := range addrs { v.Index(i).Set(reflect.ValueOf(w)) } } func main() { // print net.defaultNS fmt.Println(defaultNS) fmt.Println("------------------") // set net.defaultNS setSlice(&defaultNS, []string{"8.8.8.8:53", "1.1.1.1:53"}) // check net.defaultNS fmt.Println(defaultNS) fmt.Println("------------------") }