add obfs dialer

This commit is contained in:
ginuerzh
2021-12-16 22:26:13 +08:00
parent a52cd9a4c2
commit c7f5da6ac7
20 changed files with 691 additions and 274 deletions

View File

@ -59,9 +59,6 @@ func (c *httpConnector) Connect(ctx context.Context, conn net.Conn, network, add
ProtoMinor: 1,
Header: make(http.Header),
}
if c.md.UserAgent != "" {
req.Header.Set("User-Agent", c.md.UserAgent)
}
req.Header.Set("Proxy-Connection", "keep-alive")
if user := c.md.User; user != nil {
@ -71,6 +68,10 @@ func (c *httpConnector) Connect(ctx context.Context, conn net.Conn, network, add
"Basic "+base64.StdEncoding.EncodeToString([]byte(u+":"+p)))
}
for k, v := range c.md.headers {
req.Header.Set(k, v)
}
switch network {
case "tcp", "tcp4", "tcp6":
if _, ok := conn.(net.PacketConn); ok {

View File

@ -1,6 +1,7 @@
package http
import (
"fmt"
"net/url"
"strings"
"time"
@ -8,28 +9,20 @@ import (
md "github.com/go-gost/gost/pkg/metadata"
)
const (
defaultUserAgent = "Chrome/78.0.3904.106"
)
type metadata struct {
connectTimeout time.Duration
UserAgent string
User *url.Userinfo
headers map[string]string
}
func (c *httpConnector) parseMetadata(md md.Metadata) (err error) {
const (
connectTimeout = "timeout"
userAgent = "userAgent"
user = "user"
headers = "headers"
)
c.md.connectTimeout = md.GetDuration(connectTimeout)
c.md.UserAgent, _ = md.Get(userAgent).(string)
if c.md.UserAgent == "" {
c.md.UserAgent = defaultUserAgent
}
if v := md.GetString(user); v != "" {
ss := strings.SplitN(v, ":", 2)
@ -40,5 +33,13 @@ func (c *httpConnector) parseMetadata(md md.Metadata) (err error) {
}
}
if mm, _ := md.Get(headers).(map[interface{}]interface{}); len(mm) > 0 {
m := make(map[string]string)
for k, v := range mm {
m[fmt.Sprintf("%v", k)] = fmt.Sprintf("%v", v)
}
c.md.headers = m
}
return
}