diff --git a/common/sniff/http.go b/common/sniff/http.go index 9cd16624..faf05fd3 100644 --- a/common/sniff/http.go +++ b/common/sniff/http.go @@ -7,6 +7,7 @@ import ( "github.com/sagernet/sing-box/adapter" C "github.com/sagernet/sing-box/constant" + M "github.com/sagernet/sing/common/metadata" "github.com/sagernet/sing/protocol/http" ) @@ -15,5 +16,5 @@ func HTTPHost(ctx context.Context, reader io.Reader) (*adapter.InboundContext, e if err != nil { return nil, err } - return &adapter.InboundContext{Protocol: C.ProtocolHTTP, Domain: request.Host}, nil + return &adapter.InboundContext{Protocol: C.ProtocolHTTP, Domain: M.ParseSocksaddr(request.Host).AddrString()}, nil } diff --git a/common/sniff/http_test.go b/common/sniff/http_test.go new file mode 100644 index 00000000..98100e09 --- /dev/null +++ b/common/sniff/http_test.go @@ -0,0 +1,27 @@ +package sniff_test + +import ( + "context" + "strings" + "testing" + + "github.com/sagernet/sing-box/common/sniff" + + "github.com/stretchr/testify/require" +) + +func TestSniffHTTP1(t *testing.T) { + t.Parallel() + pkt := "GET / HTTP/1.1\r\nHost: www.google.com\r\nAccept: */*\r\n\r\n" + metadata, err := sniff.HTTPHost(context.Background(), strings.NewReader(pkt)) + require.NoError(t, err) + require.Equal(t, metadata.Domain, "www.google.com") +} + +func TestSniffHTTP1WithPort(t *testing.T) { + t.Parallel() + pkt := "GET / HTTP/1.1\r\nHost: www.gov.cn:8080\r\nAccept: */*\r\n\r\n" + metadata, err := sniff.HTTPHost(context.Background(), strings.NewReader(pkt)) + require.NoError(t, err) + require.Equal(t, metadata.Domain, "www.gov.cn") +}