From af51714e49fa9978d94f1c5a17d4445015a9e1ba Mon Sep 17 00:00:00 2001 From: wenyifan Date: Sun, 14 Aug 2022 12:36:36 +0800 Subject: [PATCH] =?UTF-8?q?=E5=85=BC=E5=AE=B9Android=E7=8E=AF=E5=A2=83?= =?UTF-8?q?=E8=BF=90=E8=A1=8C=E5=AF=BC=E8=87=B4=E6=97=A0=E6=B3=95=E8=A7=A3?= =?UTF-8?q?=E6=9E=90DNS=E9=97=AE=E9=A2=98,=E4=BF=AE=E6=94=B9=E9=BB=98?= =?UTF-8?q?=E8=AE=A4UDP=E9=98=9F=E5=88=97=E9=95=BF=E5=BA=A6=E4=BB=8E128?= =?UTF-8?q?=E5=88=B01024?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 ++++ chain.go | 3 +++ cmd/gost/main.go | 18 ++++++++++++++++-- cmd/gost/route.go | 9 +++++---- gost.go | 11 ++++++----- 5 files changed, 34 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index f724c8f..28e7e49 100644 --- a/README.md +++ b/README.md @@ -25,6 +25,10 @@ Evan 增强版特性 * HTTP CONNECT方法支持自定义Host(常用于免流混淆) - 例子: gost -L http://:8888 -F http://evan.run:80?host=cdn.dingding.com -F socks5://127.0.0.1:1080 * 修改默认User Agent为Google默认浏览器的UA,修改代理默认UA为nginx +* 兼容Android环境,针对Android环境下无法解析域名的问题(Android环境下默认使用114.114.114.114作为DNS,可使用启动参数-NS自定义) + - 例子: gost -L http://:8888 -F http://evan.run:80 -NS 114.114.114.114:53/udp +* 修复原版DNS解析的BUG +* 修复原版websocket协议中path参数不解码后发送问题 初步防检测防杀毒处理脚本 ------ diff --git a/chain.go b/chain.go index cbda871..34103ec 100644 --- a/chain.go +++ b/chain.go @@ -174,6 +174,9 @@ func (c *Chain) dialWithOptions(ctx context.Context, network, address string, op } default: } + if DefaultExternalResolver != nil && ipAddr == address { + ipAddr = c.resolve(ipAddr, DefaultExternalResolver, options.Hosts) + } d := &net.Dialer{ Timeout: timeout, Control: controlFunction, diff --git a/cmd/gost/main.go b/cmd/gost/main.go index 60df030..4a5294e 100644 --- a/cmd/gost/main.go +++ b/cmd/gost/main.go @@ -1,10 +1,12 @@ package main import ( + "context" "crypto/tls" "errors" "flag" "fmt" + "net" "net/http" "os" "runtime" @@ -35,14 +37,15 @@ func init() { flag.StringVar(&configureFile, "C", "", "configure file") flag.BoolVar(&baseCfg.Debug, "D", false, "enable debug log") flag.BoolVar(&printVersion, "V", false, "print version") + flag.StringVar(&baseCfg.ExternalResolver, "NS", "", "External DNS Server") if pprofEnabled { flag.StringVar(&pprofAddr, "P", ":6060", "profiling HTTP server address") } flag.Parse() if printVersion { - fmt.Fprintf(os.Stdout, "gost %s (%s %s/%s)\nEnhanced:\n%s\n", - gost.Version, runtime.Version(), runtime.GOOS, runtime.GOARCH, gost.Enhanced) + fmt.Fprintf(os.Stdout, "gost %s (%s %s/%s)\n", + gost.Version, runtime.Version(), runtime.GOOS, runtime.GOARCH) os.Exit(0) } @@ -85,6 +88,17 @@ func main() { gost.DefaultTLSConfig = tlsConfig + if baseCfg.ExternalResolver != "" { + gost.DefaultExternalResolver = parseResolver(baseCfg.ExternalResolver) + gost.DefaultExternalResolver.Init() + } else if os.Getenv("ANDROID_ROOT") != "" { + log.Logf("Android detected modify default DNS server to %v", gost.DefaultDNSServer) + net.DefaultResolver = &net.Resolver{Dial: func(ctx context.Context, network, address string) (net.Conn, error) { + d := net.Dialer{} + return d.DialContext(ctx, network, gost.DefaultDNSServer) + }, PreferGo: true} + } + if err := start(); err != nil { log.Log(err) os.Exit(1) diff --git a/cmd/gost/route.go b/cmd/gost/route.go index 15e6f30..9c67547 100644 --- a/cmd/gost/route.go +++ b/cmd/gost/route.go @@ -28,10 +28,11 @@ func (l *stringList) Set(value string) error { } type route struct { - ServeNodes stringList - ChainNodes stringList - Retries int - Mark int + ServeNodes stringList + ChainNodes stringList + Retries int + Mark int + ExternalResolver string } func (r *route) parseChain() (*gost.Chain, error) { diff --git a/gost.go b/gost.go index 7026635..6b9a947 100644 --- a/gost.go +++ b/gost.go @@ -21,10 +21,6 @@ import ( // Version is the gost version. const Version = "2.11.2-EvanMod-v1.2.1" -const Enhanced = "Add parameter sni for all tls\n" + - "Add parameter header=header.txt for custom header process\n" + - "Add parameter host for http connect\n" + - "Change default user agent to Chrome" const ProxyAgent = "nginx" // Debug is a flag that enables the debug log. @@ -75,7 +71,7 @@ var ( // default udp node TTL in second for udp port forwarding. defaultTTL = 60 * time.Second defaultBacklog = 128 - defaultQueueSize = 128 + defaultQueueSize = 1024 ) var ( @@ -89,6 +85,11 @@ var ( DefaultMTU = 1350 ) +var ( + DefaultExternalResolver Resolver + DefaultDNSServer = "114.114.114.114:53" +) + // SetLogger sets a new logger for internal log system. func SetLogger(logger log.Logger) { log.DefaultLogger = logger