兼容Android环境运行导致无法解析DNS问题,修改默认UDP队列长度从128到1024

This commit is contained in:
wenyifan 2022-08-14 12:36:36 +08:00
parent 9d2210368c
commit af51714e49
5 changed files with 34 additions and 11 deletions

View File

@ -25,6 +25,10 @@ Evan 增强版特性
* HTTP CONNECT方法支持自定义Host(常用于免流混淆) * HTTP CONNECT方法支持自定义Host(常用于免流混淆)
- 例子: gost -L http://:8888 -F http://evan.run:80?host=cdn.dingding.com -F socks5://127.0.0.1:1080 - 例子: 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 * 修改默认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参数不解码后发送问题
初步防检测防杀毒处理脚本 初步防检测防杀毒处理脚本
------ ------

View File

@ -174,6 +174,9 @@ func (c *Chain) dialWithOptions(ctx context.Context, network, address string, op
} }
default: default:
} }
if DefaultExternalResolver != nil && ipAddr == address {
ipAddr = c.resolve(ipAddr, DefaultExternalResolver, options.Hosts)
}
d := &net.Dialer{ d := &net.Dialer{
Timeout: timeout, Timeout: timeout,
Control: controlFunction, Control: controlFunction,

View File

@ -1,10 +1,12 @@
package main package main
import ( import (
"context"
"crypto/tls" "crypto/tls"
"errors" "errors"
"flag" "flag"
"fmt" "fmt"
"net"
"net/http" "net/http"
"os" "os"
"runtime" "runtime"
@ -35,14 +37,15 @@ func init() {
flag.StringVar(&configureFile, "C", "", "configure file") flag.StringVar(&configureFile, "C", "", "configure file")
flag.BoolVar(&baseCfg.Debug, "D", false, "enable debug log") flag.BoolVar(&baseCfg.Debug, "D", false, "enable debug log")
flag.BoolVar(&printVersion, "V", false, "print version") flag.BoolVar(&printVersion, "V", false, "print version")
flag.StringVar(&baseCfg.ExternalResolver, "NS", "", "External DNS Server")
if pprofEnabled { if pprofEnabled {
flag.StringVar(&pprofAddr, "P", ":6060", "profiling HTTP server address") flag.StringVar(&pprofAddr, "P", ":6060", "profiling HTTP server address")
} }
flag.Parse() flag.Parse()
if printVersion { if printVersion {
fmt.Fprintf(os.Stdout, "gost %s (%s %s/%s)\nEnhanced:\n%s\n", fmt.Fprintf(os.Stdout, "gost %s (%s %s/%s)\n",
gost.Version, runtime.Version(), runtime.GOOS, runtime.GOARCH, gost.Enhanced) gost.Version, runtime.Version(), runtime.GOOS, runtime.GOARCH)
os.Exit(0) os.Exit(0)
} }
@ -85,6 +88,17 @@ func main() {
gost.DefaultTLSConfig = tlsConfig 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 { if err := start(); err != nil {
log.Log(err) log.Log(err)
os.Exit(1) os.Exit(1)

View File

@ -28,10 +28,11 @@ func (l *stringList) Set(value string) error {
} }
type route struct { type route struct {
ServeNodes stringList ServeNodes stringList
ChainNodes stringList ChainNodes stringList
Retries int Retries int
Mark int Mark int
ExternalResolver string
} }
func (r *route) parseChain() (*gost.Chain, error) { func (r *route) parseChain() (*gost.Chain, error) {

11
gost.go
View File

@ -21,10 +21,6 @@ import (
// Version is the gost version. // Version is the gost version.
const Version = "2.11.2-EvanMod-v1.2.1" 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" const ProxyAgent = "nginx"
// Debug is a flag that enables the debug log. // Debug is a flag that enables the debug log.
@ -75,7 +71,7 @@ var (
// default udp node TTL in second for udp port forwarding. // default udp node TTL in second for udp port forwarding.
defaultTTL = 60 * time.Second defaultTTL = 60 * time.Second
defaultBacklog = 128 defaultBacklog = 128
defaultQueueSize = 128 defaultQueueSize = 1024
) )
var ( var (
@ -89,6 +85,11 @@ var (
DefaultMTU = 1350 DefaultMTU = 1350
) )
var (
DefaultExternalResolver Resolver
DefaultDNSServer = "114.114.114.114:53"
)
// SetLogger sets a new logger for internal log system. // SetLogger sets a new logger for internal log system.
func SetLogger(logger log.Logger) { func SetLogger(logger log.Logger) {
log.DefaultLogger = logger log.DefaultLogger = logger