diff --git a/dial.go b/dial.go index 841592d..2bbfe5b 100644 --- a/dial.go +++ b/dial.go @@ -226,6 +226,14 @@ func (obj *Dialer) verifyProxyToRemote(ctx *Response, conn net.Conn, proxyTlsCon return packCon, conn, err } } + +func (obj *Dialer) LookupIPAddrWithCache(host string) net.IP { + msgDataAny, ok := obj.dnsIpData.Load(host) + if ok { + return msgDataAny.(msgClient).ip + } + return nil +} func (obj *Dialer) loadHost(ctx *Response, host string) (net.IP, error) { msgDataAny, ok := obj.dnsIpData.Load(host) if ok { diff --git a/roundTripper.go b/roundTripper.go index 2a8f100..a1bb27c 100644 --- a/roundTripper.go +++ b/roundTripper.go @@ -261,7 +261,11 @@ func (obj *roundTripper) dial(ctx *Response) (conn *connecotr, err error) { } func (obj *roundTripper) dialConnecotr(ctx *Response, conne *connecotr, h2 bool) (err error) { if h2 { - if conne.Conn, err = http2.NewClientConn(ctx.Context(), conne.c, ctx.option.gospiderSpec.H2Spec, func(err error) { + var spec *http2.Spec + if ctx.option.gospiderSpec != nil { + spec = ctx.option.gospiderSpec.H2Spec + } + if conne.Conn, err = http2.NewClientConn(ctx.Context(), conne.c, spec, func(err error) { conne.forceCnl(tools.WrapError(err, "http2 client close")) }); err != nil { return err @@ -276,7 +280,7 @@ func (obj *roundTripper) dialConnecotr(ctx *Response, conne *connecotr, h2 bool) func (obj *roundTripper) dialAddTls(option *RequestOption, req *http.Request, netConn net.Conn) (net.Conn, bool, error) { ctx, cnl := context.WithTimeout(req.Context(), option.TlsHandshakeTimeout) defer cnl() - if option.gospiderSpec.TLSSpec != nil { + if option.gospiderSpec != nil && option.gospiderSpec.TLSSpec != nil { if tlsConn, err := obj.dialer.addJa3Tls(ctx, netConn, getHost(req), option.gospiderSpec.TLSSpec, option.UtlsConfig.Clone(), option.ForceHttp1); err != nil { return tlsConn, false, tools.WrapError(err, "add ja3 tls error") } else { diff --git a/test/proxy/http3_proxy_test.go b/test/proxy/http3_proxy_test.go index 299fcd6..ceb55e2 100644 --- a/test/proxy/http3_proxy_test.go +++ b/test/proxy/http3_proxy_test.go @@ -4,6 +4,7 @@ import ( "context" "crypto/tls" "log" + "net" "testing" "fmt" @@ -89,7 +90,7 @@ func server() { fmt.Fprint(w, "method is not supported") } }) - tlsCert, err := gtls.CreateProxyCertWithName("localhost") + tlsCert, err := gtls.CreateCertWithAddr(net.IP{127, 0, 0, 1}) if err != nil { panic(err) }