diff --git a/cmd/sing-box/cmd_run.go b/cmd/sing-box/cmd_run.go index e37e9e20..0ee8b892 100644 --- a/cmd/sing-box/cmd_run.go +++ b/cmd/sing-box/cmd_run.go @@ -102,6 +102,9 @@ func readConfigAndMerge() (option.Options, error) { if err != nil { return option.Options{}, err } + if len(optionsList) == 1 { + return optionsList[0].options, nil + } var mergedOptions option.Options for _, options := range optionsList { mergedOptions, err = badjsonmerge.MergeOptions(options.options, mergedOptions) diff --git a/inbound/default_tcp.go b/inbound/default_tcp.go index ce4f0768..238762dc 100644 --- a/inbound/default_tcp.go +++ b/inbound/default_tcp.go @@ -3,7 +3,6 @@ package inbound import ( "context" "net" - "net/netip" "github.com/sagernet/sing-box/adapter" "github.com/sagernet/sing-box/common/proxyproto" @@ -16,7 +15,7 @@ import ( func (a *myInboundAdapter) ListenTCP() (net.Listener, error) { var err error - bindAddr := M.SocksaddrFrom(netip.Addr(a.listenOptions.Listen), a.listenOptions.ListenPort) + bindAddr := M.SocksaddrFrom(a.listenOptions.Listen.Build(), a.listenOptions.ListenPort) var tcpListener net.Listener if !a.listenOptions.TCPFastOpen { tcpListener, err = net.ListenTCP(M.NetworkFromNetAddr(N.NetworkTCP, bindAddr.Addr), bindAddr.TCPAddr()) diff --git a/inbound/default_udp.go b/inbound/default_udp.go index 90cd7b19..219cf73d 100644 --- a/inbound/default_udp.go +++ b/inbound/default_udp.go @@ -2,7 +2,6 @@ package inbound import ( "net" - "net/netip" "os" "time" @@ -16,7 +15,7 @@ import ( ) func (a *myInboundAdapter) ListenUDP() (net.PacketConn, error) { - bindAddr := M.SocksaddrFrom(netip.Addr(a.listenOptions.Listen), a.listenOptions.ListenPort) + bindAddr := M.SocksaddrFrom(a.listenOptions.Listen.Build(), a.listenOptions.ListenPort) var lc net.ListenConfig var udpFragment bool if a.listenOptions.UDPFragment != nil { diff --git a/option/inbound.go b/option/inbound.go index d24a1de8..9533532b 100644 --- a/option/inbound.go +++ b/option/inbound.go @@ -117,14 +117,14 @@ type InboundOptions struct { } type ListenOptions struct { - Listen ListenAddress `json:"listen"` - ListenPort uint16 `json:"listen_port,omitempty"` - TCPFastOpen bool `json:"tcp_fast_open,omitempty"` - UDPFragment *bool `json:"udp_fragment,omitempty"` - UDPFragmentDefault bool `json:"-"` - UDPTimeout int64 `json:"udp_timeout,omitempty"` - ProxyProtocol bool `json:"proxy_protocol,omitempty"` - ProxyProtocolAcceptNoHeader bool `json:"proxy_protocol_accept_no_header,omitempty"` - Detour string `json:"detour,omitempty"` + Listen *ListenAddress `json:"listen,omitempty"` + ListenPort uint16 `json:"listen_port,omitempty"` + TCPFastOpen bool `json:"tcp_fast_open,omitempty"` + UDPFragment *bool `json:"udp_fragment,omitempty"` + UDPFragmentDefault bool `json:"-"` + UDPTimeout int64 `json:"udp_timeout,omitempty"` + ProxyProtocol bool `json:"proxy_protocol,omitempty"` + ProxyProtocolAcceptNoHeader bool `json:"proxy_protocol_accept_no_header,omitempty"` + Detour string `json:"detour,omitempty"` InboundOptions } diff --git a/option/types.go b/option/types.go index 0756b86b..f4dd4b48 100644 --- a/option/types.go +++ b/option/types.go @@ -16,6 +16,11 @@ import ( type ListenAddress netip.Addr +func NewListenAddress(addr netip.Addr) *ListenAddress { + address := ListenAddress(addr) + return &address +} + func (a ListenAddress) MarshalJSON() ([]byte, error) { addr := netip.Addr(a) if !addr.IsValid() { @@ -38,8 +43,11 @@ func (a *ListenAddress) UnmarshalJSON(content []byte) error { return nil } -func (a ListenAddress) Build() netip.Addr { - return (netip.Addr)(a) +func (a *ListenAddress) Build() netip.Addr { + if a == nil { + return netip.AddrFrom4([4]byte{127, 0, 0, 1}) + } + return (netip.Addr)(*a) } type NetworkList string diff --git a/test/direct_test.go b/test/direct_test.go index ad48ae98..00de5c8a 100644 --- a/test/direct_test.go +++ b/test/direct_test.go @@ -16,7 +16,7 @@ func TestProxyProtocol(t *testing.T) { Tag: "mixed-in", MixedOptions: option.HTTPMixedInboundOptions{ ListenOptions: option.ListenOptions{ - Listen: option.ListenAddress(netip.IPv4Unspecified()), + Listen: option.NewListenAddress(netip.IPv4Unspecified()), ListenPort: clientPort, }, }, @@ -25,7 +25,7 @@ func TestProxyProtocol(t *testing.T) { Type: C.TypeDirect, DirectOptions: option.DirectInboundOptions{ ListenOptions: option.ListenOptions{ - Listen: option.ListenAddress(netip.IPv4Unspecified()), + Listen: option.NewListenAddress(netip.IPv4Unspecified()), ListenPort: serverPort, ProxyProtocol: true, }, diff --git a/test/go.mod b/test/go.mod index 94a0d031..006dfcf9 100644 --- a/test/go.mod +++ b/test/go.mod @@ -10,7 +10,7 @@ require ( github.com/docker/docker v20.10.18+incompatible github.com/docker/go-connections v0.4.0 github.com/gofrs/uuid v4.4.0+incompatible - github.com/sagernet/sing v0.2.1-0.20230318083058-18cd006d266e + github.com/sagernet/sing v0.2.1-0.20230318094614-4bbf5f2c3046 github.com/sagernet/sing-shadowsocks v0.1.2-0.20230221080503-769c01d6bba9 github.com/spyzhov/ajson v0.7.1 github.com/stretchr/testify v1.8.2 diff --git a/test/go.sum b/test/go.sum index b08a8ead..a110ef8e 100644 --- a/test/go.sum +++ b/test/go.sum @@ -126,8 +126,8 @@ github.com/sagernet/reality v0.0.0-20230312150606-35ea9af0e0b8 h1:4M3+0/kqvJuTsi github.com/sagernet/reality v0.0.0-20230312150606-35ea9af0e0b8/go.mod h1:B8lp4WkQ1PwNnrVMM6KyuFR20pU8jYBD+A4EhJovEXU= github.com/sagernet/sing v0.0.0-20220817130738-ce854cda8522/go.mod h1:QVsS5L/ZA2Q5UhQwLrn0Trw+msNd/NPGEhBKR/ioWiY= github.com/sagernet/sing v0.1.8/go.mod h1:jt1w2u7lJQFFSGLiRrRIs5YWmx4kAPfWuOejuDW9qMk= -github.com/sagernet/sing v0.2.1-0.20230318083058-18cd006d266e h1:KDaZ0GIlpdhCVn2vf7YL2r/8E5kSZiMMeMgn5CF7eJU= -github.com/sagernet/sing v0.2.1-0.20230318083058-18cd006d266e/go.mod h1:9uHswk2hITw8leDbiLS/xn0t9nzBcbePxzm9PJhwdlw= +github.com/sagernet/sing v0.2.1-0.20230318094614-4bbf5f2c3046 h1:/+ZWbxRvQmco9ES2qT5Eh/x/IiQRjAcUyRG/vQ4dpxc= +github.com/sagernet/sing v0.2.1-0.20230318094614-4bbf5f2c3046/go.mod h1:9uHswk2hITw8leDbiLS/xn0t9nzBcbePxzm9PJhwdlw= github.com/sagernet/sing-dns v0.1.4 h1:7VxgeoSCiiazDSaXXQVcvrTBxFpOePPq/4XdgnUDN+0= github.com/sagernet/sing-dns v0.1.4/go.mod h1:1+6pCa48B1AI78lD+/i/dLgpw4MwfnsSpZo0Ds8wzzk= github.com/sagernet/sing-shadowsocks v0.1.2-0.20230221080503-769c01d6bba9 h1:qS39eA4C7x+zhEkySbASrtmb6ebdy5v0y2M6mgkmSO0= diff --git a/test/http_test.go b/test/http_test.go index b0a05611..4b5fe70f 100644 --- a/test/http_test.go +++ b/test/http_test.go @@ -16,7 +16,7 @@ func TestHTTPSelf(t *testing.T) { Tag: "mixed-in", MixedOptions: option.HTTPMixedInboundOptions{ ListenOptions: option.ListenOptions{ - Listen: option.ListenAddress(netip.IPv4Unspecified()), + Listen: option.NewListenAddress(netip.IPv4Unspecified()), ListenPort: clientPort, }, }, @@ -25,7 +25,7 @@ func TestHTTPSelf(t *testing.T) { Type: C.TypeMixed, MixedOptions: option.HTTPMixedInboundOptions{ ListenOptions: option.ListenOptions{ - Listen: option.ListenAddress(netip.IPv4Unspecified()), + Listen: option.NewListenAddress(netip.IPv4Unspecified()), ListenPort: serverPort, }, }, diff --git a/test/hysteria_test.go b/test/hysteria_test.go index 05a4464e..6337548c 100644 --- a/test/hysteria_test.go +++ b/test/hysteria_test.go @@ -17,7 +17,7 @@ func TestHysteriaSelf(t *testing.T) { Tag: "mixed-in", MixedOptions: option.HTTPMixedInboundOptions{ ListenOptions: option.ListenOptions{ - Listen: option.ListenAddress(netip.IPv4Unspecified()), + Listen: option.NewListenAddress(netip.IPv4Unspecified()), ListenPort: clientPort, }, }, @@ -26,7 +26,7 @@ func TestHysteriaSelf(t *testing.T) { Type: C.TypeHysteria, HysteriaOptions: option.HysteriaInboundOptions{ ListenOptions: option.ListenOptions{ - Listen: option.ListenAddress(netip.IPv4Unspecified()), + Listen: option.NewListenAddress(netip.IPv4Unspecified()), ListenPort: serverPort, }, UpMbps: 100, @@ -90,7 +90,7 @@ func TestHysteriaInbound(t *testing.T) { Type: C.TypeHysteria, HysteriaOptions: option.HysteriaInboundOptions{ ListenOptions: option.ListenOptions{ - Listen: option.ListenAddress(netip.IPv4Unspecified()), + Listen: option.NewListenAddress(netip.IPv4Unspecified()), ListenPort: serverPort, }, UpMbps: 100, @@ -139,7 +139,7 @@ func TestHysteriaOutbound(t *testing.T) { Type: C.TypeMixed, MixedOptions: option.HTTPMixedInboundOptions{ ListenOptions: option.ListenOptions{ - Listen: option.ListenAddress(netip.IPv4Unspecified()), + Listen: option.NewListenAddress(netip.IPv4Unspecified()), ListenPort: clientPort, }, }, diff --git a/test/inbound_detour_test.go b/test/inbound_detour_test.go index 62d32072..c2ef57a5 100644 --- a/test/inbound_detour_test.go +++ b/test/inbound_detour_test.go @@ -19,7 +19,7 @@ func TestChainedInbound(t *testing.T) { Tag: "mixed-in", MixedOptions: option.HTTPMixedInboundOptions{ ListenOptions: option.ListenOptions{ - Listen: option.ListenAddress(netip.IPv4Unspecified()), + Listen: option.NewListenAddress(netip.IPv4Unspecified()), ListenPort: clientPort, }, }, @@ -28,7 +28,7 @@ func TestChainedInbound(t *testing.T) { Type: C.TypeShadowsocks, ShadowsocksOptions: option.ShadowsocksInboundOptions{ ListenOptions: option.ListenOptions{ - Listen: option.ListenAddress(netip.IPv4Unspecified()), + Listen: option.NewListenAddress(netip.IPv4Unspecified()), ListenPort: serverPort, Detour: "detour", }, @@ -41,7 +41,7 @@ func TestChainedInbound(t *testing.T) { Tag: "detour", ShadowsocksOptions: option.ShadowsocksInboundOptions{ ListenOptions: option.ListenOptions{ - Listen: option.ListenAddress(netip.IPv4Unspecified()), + Listen: option.NewListenAddress(netip.IPv4Unspecified()), ListenPort: otherPort, }, Method: method, diff --git a/test/mux_cool_test.go b/test/mux_cool_test.go index 62fa2cf4..a1234da3 100644 --- a/test/mux_cool_test.go +++ b/test/mux_cool_test.go @@ -41,7 +41,7 @@ func TestMuxCoolServer(t *testing.T) { Type: C.TypeVMess, VMessOptions: option.VMessInboundOptions{ ListenOptions: option.ListenOptions{ - Listen: option.ListenAddress(netip.IPv4Unspecified()), + Listen: option.NewListenAddress(netip.IPv4Unspecified()), ListenPort: serverPort, }, Users: []option.VMessUser{ @@ -85,7 +85,7 @@ func TestMuxCoolClient(t *testing.T) { Type: C.TypeMixed, MixedOptions: option.HTTPMixedInboundOptions{ ListenOptions: option.ListenOptions{ - Listen: option.ListenAddress(netip.IPv4Unspecified()), + Listen: option.NewListenAddress(netip.IPv4Unspecified()), ListenPort: clientPort, }, }, @@ -117,7 +117,7 @@ func TestMuxCoolSelf(t *testing.T) { Tag: "mixed-in", MixedOptions: option.HTTPMixedInboundOptions{ ListenOptions: option.ListenOptions{ - Listen: option.ListenAddress(netip.IPv4Unspecified()), + Listen: option.NewListenAddress(netip.IPv4Unspecified()), ListenPort: clientPort, }, }, @@ -126,7 +126,7 @@ func TestMuxCoolSelf(t *testing.T) { Type: C.TypeVMess, VMessOptions: option.VMessInboundOptions{ ListenOptions: option.ListenOptions{ - Listen: option.ListenAddress(netip.IPv4Unspecified()), + Listen: option.NewListenAddress(netip.IPv4Unspecified()), ListenPort: serverPort, }, Users: []option.VMessUser{ diff --git a/test/mux_test.go b/test/mux_test.go index 95d01ecc..2deceb58 100644 --- a/test/mux_test.go +++ b/test/mux_test.go @@ -39,7 +39,7 @@ func testShadowsocksMux(t *testing.T, protocol string) { Tag: "mixed-in", MixedOptions: option.HTTPMixedInboundOptions{ ListenOptions: option.ListenOptions{ - Listen: option.ListenAddress(netip.IPv4Unspecified()), + Listen: option.NewListenAddress(netip.IPv4Unspecified()), ListenPort: clientPort, }, }, @@ -48,7 +48,7 @@ func testShadowsocksMux(t *testing.T, protocol string) { Type: C.TypeShadowsocks, ShadowsocksOptions: option.ShadowsocksInboundOptions{ ListenOptions: option.ListenOptions{ - Listen: option.ListenAddress(netip.IPv4Unspecified()), + Listen: option.NewListenAddress(netip.IPv4Unspecified()), ListenPort: serverPort, }, Method: method, @@ -100,7 +100,7 @@ func testVMessMux(t *testing.T, protocol string) { Tag: "mixed-in", MixedOptions: option.HTTPMixedInboundOptions{ ListenOptions: option.ListenOptions{ - Listen: option.ListenAddress(netip.IPv4Unspecified()), + Listen: option.NewListenAddress(netip.IPv4Unspecified()), ListenPort: clientPort, }, }, @@ -109,7 +109,7 @@ func testVMessMux(t *testing.T, protocol string) { Type: C.TypeVMess, VMessOptions: option.VMessInboundOptions{ ListenOptions: option.ListenOptions{ - Listen: option.ListenAddress(netip.IPv4Unspecified()), + Listen: option.NewListenAddress(netip.IPv4Unspecified()), ListenPort: serverPort, }, Users: []option.VMessUser{ diff --git a/test/naive_test.go b/test/naive_test.go index b6292b7d..86f8b329 100644 --- a/test/naive_test.go +++ b/test/naive_test.go @@ -18,7 +18,7 @@ func TestNaiveInboundWithNginx(t *testing.T) { Type: C.TypeNaive, NaiveOptions: option.NaiveInboundOptions{ ListenOptions: option.ListenOptions{ - Listen: option.ListenAddress(netip.IPv4Unspecified()), + Listen: option.NewListenAddress(netip.IPv4Unspecified()), ListenPort: otherPort, }, Users: []auth.User{ @@ -64,7 +64,7 @@ func TestNaiveInbound(t *testing.T) { Type: C.TypeNaive, NaiveOptions: option.NaiveInboundOptions{ ListenOptions: option.ListenOptions{ - Listen: option.ListenAddress(netip.IPv4Unspecified()), + Listen: option.NewListenAddress(netip.IPv4Unspecified()), ListenPort: serverPort, }, Users: []auth.User{ @@ -106,7 +106,7 @@ func TestNaiveHTTP3Inbound(t *testing.T) { Type: C.TypeNaive, NaiveOptions: option.NaiveInboundOptions{ ListenOptions: option.ListenOptions{ - Listen: option.ListenAddress(netip.IPv4Unspecified()), + Listen: option.NewListenAddress(netip.IPv4Unspecified()), ListenPort: serverPort, }, Users: []auth.User{ diff --git a/test/reality_test.go b/test/reality_test.go index 6bfb7988..a3362b4d 100644 --- a/test/reality_test.go +++ b/test/reality_test.go @@ -20,7 +20,7 @@ func TestVLESSVisionReality(t *testing.T) { Tag: "mixed-in", MixedOptions: option.HTTPMixedInboundOptions{ ListenOptions: option.ListenOptions{ - Listen: option.ListenAddress(netip.IPv4Unspecified()), + Listen: option.NewListenAddress(netip.IPv4Unspecified()), ListenPort: clientPort, }, }, @@ -29,7 +29,7 @@ func TestVLESSVisionReality(t *testing.T) { Type: C.TypeVLESS, VLESSOptions: option.VLESSInboundOptions{ ListenOptions: option.ListenOptions{ - Listen: option.ListenAddress(netip.IPv4Unspecified()), + Listen: option.NewListenAddress(netip.IPv4Unspecified()), ListenPort: serverPort, }, Users: []option.VLESSUser{ @@ -61,7 +61,7 @@ func TestVLESSVisionReality(t *testing.T) { Tag: "trojan", TrojanOptions: option.TrojanInboundOptions{ ListenOptions: option.ListenOptions{ - Listen: option.ListenAddress(netip.IPv4Unspecified()), + Listen: option.NewListenAddress(netip.IPv4Unspecified()), ListenPort: otherPort, }, Users: []option.TrojanUser{ @@ -170,7 +170,7 @@ func testVLESSRealityTransport(t *testing.T, transport *option.V2RayTransportOpt Tag: "mixed-in", MixedOptions: option.HTTPMixedInboundOptions{ ListenOptions: option.ListenOptions{ - Listen: option.ListenAddress(netip.IPv4Unspecified()), + Listen: option.NewListenAddress(netip.IPv4Unspecified()), ListenPort: clientPort, }, }, @@ -179,7 +179,7 @@ func testVLESSRealityTransport(t *testing.T, transport *option.V2RayTransportOpt Type: C.TypeVLESS, VLESSOptions: option.VLESSInboundOptions{ ListenOptions: option.ListenOptions{ - Listen: option.ListenAddress(netip.IPv4Unspecified()), + Listen: option.NewListenAddress(netip.IPv4Unspecified()), ListenPort: serverPort, }, Users: []option.VLESSUser{ @@ -211,7 +211,7 @@ func testVLESSRealityTransport(t *testing.T, transport *option.V2RayTransportOpt Tag: "trojan", TrojanOptions: option.TrojanInboundOptions{ ListenOptions: option.ListenOptions{ - Listen: option.ListenAddress(netip.IPv4Unspecified()), + Listen: option.NewListenAddress(netip.IPv4Unspecified()), ListenPort: otherPort, }, Users: []option.TrojanUser{ diff --git a/test/shadowsocks_test.go b/test/shadowsocks_test.go index c681ffe0..6bf099a9 100644 --- a/test/shadowsocks_test.go +++ b/test/shadowsocks_test.go @@ -83,7 +83,7 @@ func testShadowsocksInboundWithShadowsocksRust(t *testing.T, method string, pass Type: C.TypeShadowsocks, ShadowsocksOptions: option.ShadowsocksInboundOptions{ ListenOptions: option.ListenOptions{ - Listen: option.ListenAddress(netip.IPv4Unspecified()), + Listen: option.NewListenAddress(netip.IPv4Unspecified()), ListenPort: serverPort, }, Method: method, @@ -108,7 +108,7 @@ func testShadowsocksOutboundWithShadowsocksRust(t *testing.T, method string, pas Type: C.TypeMixed, MixedOptions: option.HTTPMixedInboundOptions{ ListenOptions: option.ListenOptions{ - Listen: option.ListenAddress(netip.IPv4Unspecified()), + Listen: option.NewListenAddress(netip.IPv4Unspecified()), ListenPort: clientPort, }, }, @@ -139,7 +139,7 @@ func testShadowsocksSelf(t *testing.T, method string, password string) { Tag: "mixed-in", MixedOptions: option.HTTPMixedInboundOptions{ ListenOptions: option.ListenOptions{ - Listen: option.ListenAddress(netip.IPv4Unspecified()), + Listen: option.NewListenAddress(netip.IPv4Unspecified()), ListenPort: clientPort, }, }, @@ -148,7 +148,7 @@ func testShadowsocksSelf(t *testing.T, method string, password string) { Type: C.TypeShadowsocks, ShadowsocksOptions: option.ShadowsocksInboundOptions{ ListenOptions: option.ListenOptions{ - Listen: option.ListenAddress(netip.IPv4Unspecified()), + Listen: option.NewListenAddress(netip.IPv4Unspecified()), ListenPort: serverPort, }, Method: method, @@ -197,7 +197,7 @@ func TestShadowsocksUoT(t *testing.T) { Tag: "mixed-in", MixedOptions: option.HTTPMixedInboundOptions{ ListenOptions: option.ListenOptions{ - Listen: option.ListenAddress(netip.IPv4Unspecified()), + Listen: option.NewListenAddress(netip.IPv4Unspecified()), ListenPort: clientPort, }, }, @@ -206,7 +206,7 @@ func TestShadowsocksUoT(t *testing.T) { Type: C.TypeShadowsocks, ShadowsocksOptions: option.ShadowsocksInboundOptions{ ListenOptions: option.ListenOptions{ - Listen: option.ListenAddress(netip.IPv4Unspecified()), + Listen: option.NewListenAddress(netip.IPv4Unspecified()), ListenPort: serverPort, }, Method: method, diff --git a/test/shadowsocksr_test.go b/test/shadowsocksr_test.go index a81c61b1..fa034b56 100644 --- a/test/shadowsocksr_test.go +++ b/test/shadowsocksr_test.go @@ -22,7 +22,7 @@ func TestShadowsocksR(t *testing.T) { Type: C.TypeMixed, MixedOptions: option.HTTPMixedInboundOptions{ ListenOptions: option.ListenOptions{ - Listen: option.ListenAddress(netip.IPv4Unspecified()), + Listen: option.NewListenAddress(netip.IPv4Unspecified()), ListenPort: clientPort, }, }, diff --git a/test/shadowtls_test.go b/test/shadowtls_test.go index 0671b1af..467b0aed 100644 --- a/test/shadowtls_test.go +++ b/test/shadowtls_test.go @@ -42,7 +42,7 @@ func testShadowTLS(t *testing.T, version int, password string, utlsEanbled bool) Type: C.TypeMixed, MixedOptions: option.HTTPMixedInboundOptions{ ListenOptions: option.ListenOptions{ - Listen: option.ListenAddress(netip.IPv4Unspecified()), + Listen: option.NewListenAddress(netip.IPv4Unspecified()), ListenPort: clientPort, }, }, @@ -52,7 +52,7 @@ func testShadowTLS(t *testing.T, version int, password string, utlsEanbled bool) Tag: "in", ShadowTLSOptions: option.ShadowTLSInboundOptions{ ListenOptions: option.ListenOptions{ - Listen: option.ListenAddress(netip.IPv4Unspecified()), + Listen: option.NewListenAddress(netip.IPv4Unspecified()), ListenPort: serverPort, Detour: "detour", }, @@ -72,7 +72,7 @@ func testShadowTLS(t *testing.T, version int, password string, utlsEanbled bool) Tag: "detour", ShadowsocksOptions: option.ShadowsocksInboundOptions{ ListenOptions: option.ListenOptions{ - Listen: option.ListenAddress(netip.IPv4Unspecified()), + Listen: option.NewListenAddress(netip.IPv4Unspecified()), ListenPort: otherPort, }, Method: method, @@ -134,7 +134,7 @@ func TestShadowTLSFallback(t *testing.T) { Type: C.TypeShadowTLS, ShadowTLSOptions: option.ShadowTLSInboundOptions{ ListenOptions: option.ListenOptions{ - Listen: option.ListenAddress(netip.IPv4Unspecified()), + Listen: option.NewListenAddress(netip.IPv4Unspecified()), ListenPort: serverPort, }, Handshake: option.ShadowTLSHandshakeOptions{ @@ -180,7 +180,7 @@ func TestShadowTLSInbound(t *testing.T) { Tag: "in", MixedOptions: option.HTTPMixedInboundOptions{ ListenOptions: option.ListenOptions{ - Listen: option.ListenAddress(netip.IPv4Unspecified()), + Listen: option.NewListenAddress(netip.IPv4Unspecified()), ListenPort: clientPort, }, }, @@ -189,7 +189,7 @@ func TestShadowTLSInbound(t *testing.T) { Type: C.TypeShadowTLS, ShadowTLSOptions: option.ShadowTLSInboundOptions{ ListenOptions: option.ListenOptions{ - Listen: option.ListenAddress(netip.IPv4Unspecified()), + Listen: option.NewListenAddress(netip.IPv4Unspecified()), ListenPort: serverPort, Detour: "detour", }, @@ -208,7 +208,7 @@ func TestShadowTLSInbound(t *testing.T) { Tag: "detour", ShadowsocksOptions: option.ShadowsocksInboundOptions{ ListenOptions: option.ListenOptions{ - Listen: option.ListenAddress(netip.IPv4Unspecified()), + Listen: option.NewListenAddress(netip.IPv4Unspecified()), }, Method: method, Password: password, @@ -260,7 +260,7 @@ func TestShadowTLSOutbound(t *testing.T) { Type: C.TypeMixed, MixedOptions: option.HTTPMixedInboundOptions{ ListenOptions: option.ListenOptions{ - Listen: option.ListenAddress(netip.IPv4Unspecified()), + Listen: option.NewListenAddress(netip.IPv4Unspecified()), ListenPort: clientPort, }, }, @@ -270,7 +270,7 @@ func TestShadowTLSOutbound(t *testing.T) { Tag: "detour", ShadowsocksOptions: option.ShadowsocksInboundOptions{ ListenOptions: option.ListenOptions{ - Listen: option.ListenAddress(netip.IPv4Unspecified()), + Listen: option.NewListenAddress(netip.IPv4Unspecified()), ListenPort: otherPort, }, Method: method, diff --git a/test/ss_plugin_test.go b/test/ss_plugin_test.go index d8d9183b..ef6fe648 100644 --- a/test/ss_plugin_test.go +++ b/test/ss_plugin_test.go @@ -37,7 +37,7 @@ func testShadowsocksPlugin(t *testing.T, name string, opts string, args string) Type: C.TypeMixed, MixedOptions: option.HTTPMixedInboundOptions{ ListenOptions: option.ListenOptions{ - Listen: option.ListenAddress(netip.IPv4Unspecified()), + Listen: option.NewListenAddress(netip.IPv4Unspecified()), ListenPort: clientPort, }, }, diff --git a/test/tfo_test.go b/test/tfo_test.go index d5fba41e..cc97e189 100644 --- a/test/tfo_test.go +++ b/test/tfo_test.go @@ -19,7 +19,7 @@ func TestTCPSlowOpen(t *testing.T) { Tag: "mixed-in", MixedOptions: option.HTTPMixedInboundOptions{ ListenOptions: option.ListenOptions{ - Listen: option.ListenAddress(netip.IPv4Unspecified()), + Listen: option.NewListenAddress(netip.IPv4Unspecified()), ListenPort: clientPort, }, }, @@ -28,7 +28,7 @@ func TestTCPSlowOpen(t *testing.T) { Type: C.TypeShadowsocks, ShadowsocksOptions: option.ShadowsocksInboundOptions{ ListenOptions: option.ListenOptions{ - Listen: option.ListenAddress(netip.IPv4Unspecified()), + Listen: option.NewListenAddress(netip.IPv4Unspecified()), ListenPort: serverPort, TCPFastOpen: true, }, diff --git a/test/tls_test.go b/test/tls_test.go index d2292ecb..16a400cd 100644 --- a/test/tls_test.go +++ b/test/tls_test.go @@ -17,7 +17,7 @@ func TestUTLS(t *testing.T) { Tag: "mixed-in", MixedOptions: option.HTTPMixedInboundOptions{ ListenOptions: option.ListenOptions{ - Listen: option.ListenAddress(netip.IPv4Unspecified()), + Listen: option.NewListenAddress(netip.IPv4Unspecified()), ListenPort: clientPort, }, }, @@ -26,7 +26,7 @@ func TestUTLS(t *testing.T) { Type: C.TypeTrojan, TrojanOptions: option.TrojanInboundOptions{ ListenOptions: option.ListenOptions{ - Listen: option.ListenAddress(netip.IPv4Unspecified()), + Listen: option.NewListenAddress(netip.IPv4Unspecified()), ListenPort: serverPort, }, Users: []option.TrojanUser{ diff --git a/test/trojan_test.go b/test/trojan_test.go index 88521cca..4dab0db7 100644 --- a/test/trojan_test.go +++ b/test/trojan_test.go @@ -25,7 +25,7 @@ func TestTrojanOutbound(t *testing.T) { Type: C.TypeMixed, MixedOptions: option.HTTPMixedInboundOptions{ ListenOptions: option.ListenOptions{ - Listen: option.ListenAddress(netip.IPv4Unspecified()), + Listen: option.NewListenAddress(netip.IPv4Unspecified()), ListenPort: clientPort, }, }, @@ -61,7 +61,7 @@ func TestTrojanSelf(t *testing.T) { Tag: "mixed-in", MixedOptions: option.HTTPMixedInboundOptions{ ListenOptions: option.ListenOptions{ - Listen: option.ListenAddress(netip.IPv4Unspecified()), + Listen: option.NewListenAddress(netip.IPv4Unspecified()), ListenPort: clientPort, }, }, @@ -70,7 +70,7 @@ func TestTrojanSelf(t *testing.T) { Type: C.TypeTrojan, TrojanOptions: option.TrojanInboundOptions{ ListenOptions: option.ListenOptions{ - Listen: option.ListenAddress(netip.IPv4Unspecified()), + Listen: option.NewListenAddress(netip.IPv4Unspecified()), ListenPort: serverPort, }, Users: []option.TrojanUser{ @@ -131,7 +131,7 @@ func TestTrojanPlainSelf(t *testing.T) { Tag: "mixed-in", MixedOptions: option.HTTPMixedInboundOptions{ ListenOptions: option.ListenOptions{ - Listen: option.ListenAddress(netip.IPv4Unspecified()), + Listen: option.NewListenAddress(netip.IPv4Unspecified()), ListenPort: clientPort, }, }, @@ -140,7 +140,7 @@ func TestTrojanPlainSelf(t *testing.T) { Type: C.TypeTrojan, TrojanOptions: option.TrojanInboundOptions{ ListenOptions: option.ListenOptions{ - Listen: option.ListenAddress(netip.IPv4Unspecified()), + Listen: option.NewListenAddress(netip.IPv4Unspecified()), ListenPort: serverPort, }, Users: []option.TrojanUser{ diff --git a/test/v2ray_api_test.go b/test/v2ray_api_test.go index 0f817d1a..1bea41a6 100644 --- a/test/v2ray_api_test.go +++ b/test/v2ray_api_test.go @@ -20,7 +20,7 @@ func TestV2RayAPI(t *testing.T) { Tag: "in", MixedOptions: option.HTTPMixedInboundOptions{ ListenOptions: option.ListenOptions{ - Listen: option.ListenAddress(netip.IPv4Unspecified()), + Listen: option.NewListenAddress(netip.IPv4Unspecified()), ListenPort: clientPort, }, }, diff --git a/test/v2ray_grpc_test.go b/test/v2ray_grpc_test.go index 94e810ad..e4c5e49b 100644 --- a/test/v2ray_grpc_test.go +++ b/test/v2ray_grpc_test.go @@ -32,7 +32,7 @@ func testV2RayGRPCInbound(t *testing.T, forceLite bool) { Type: C.TypeVMess, VMessOptions: option.VMessInboundOptions{ ListenOptions: option.ListenOptions{ - Listen: option.ListenAddress(netip.IPv4Unspecified()), + Listen: option.NewListenAddress(netip.IPv4Unspecified()), ListenPort: serverPort, }, Users: []option.VMessUser{ @@ -128,7 +128,7 @@ func testV2RayGRPCOutbound(t *testing.T, forceLite bool) { Tag: "mixed-in", MixedOptions: option.HTTPMixedInboundOptions{ ListenOptions: option.ListenOptions{ - Listen: option.ListenAddress(netip.IPv4Unspecified()), + Listen: option.NewListenAddress(netip.IPv4Unspecified()), ListenPort: clientPort, }, }, diff --git a/test/v2ray_transport_test.go b/test/v2ray_transport_test.go index 9611c6b6..2beeec8b 100644 --- a/test/v2ray_transport_test.go +++ b/test/v2ray_transport_test.go @@ -50,7 +50,7 @@ func testVMessTransportSelf(t *testing.T, server *option.V2RayTransportOptions, Tag: "mixed-in", MixedOptions: option.HTTPMixedInboundOptions{ ListenOptions: option.ListenOptions{ - Listen: option.ListenAddress(netip.IPv4Unspecified()), + Listen: option.NewListenAddress(netip.IPv4Unspecified()), ListenPort: clientPort, }, }, @@ -59,7 +59,7 @@ func testVMessTransportSelf(t *testing.T, server *option.V2RayTransportOptions, Type: C.TypeVMess, VMessOptions: option.VMessInboundOptions{ ListenOptions: option.ListenOptions{ - Listen: option.ListenAddress(netip.IPv4Unspecified()), + Listen: option.NewListenAddress(netip.IPv4Unspecified()), ListenPort: serverPort, }, Users: []option.VMessUser{ @@ -126,7 +126,7 @@ func testTrojanTransportSelf(t *testing.T, server *option.V2RayTransportOptions, Tag: "mixed-in", MixedOptions: option.HTTPMixedInboundOptions{ ListenOptions: option.ListenOptions{ - Listen: option.ListenAddress(netip.IPv4Unspecified()), + Listen: option.NewListenAddress(netip.IPv4Unspecified()), ListenPort: clientPort, }, }, @@ -135,7 +135,7 @@ func testTrojanTransportSelf(t *testing.T, server *option.V2RayTransportOptions, Type: C.TypeTrojan, TrojanOptions: option.TrojanInboundOptions{ ListenOptions: option.ListenOptions{ - Listen: option.ListenAddress(netip.IPv4Unspecified()), + Listen: option.NewListenAddress(netip.IPv4Unspecified()), ListenPort: serverPort, }, Users: []option.TrojanUser{ @@ -204,7 +204,7 @@ func TestVMessQUICSelf(t *testing.T) { Tag: "mixed-in", MixedOptions: option.HTTPMixedInboundOptions{ ListenOptions: option.ListenOptions{ - Listen: option.ListenAddress(netip.IPv4Unspecified()), + Listen: option.NewListenAddress(netip.IPv4Unspecified()), ListenPort: clientPort, }, }, @@ -213,7 +213,7 @@ func TestVMessQUICSelf(t *testing.T) { Type: C.TypeVMess, VMessOptions: option.VMessInboundOptions{ ListenOptions: option.ListenOptions{ - Listen: option.ListenAddress(netip.IPv4Unspecified()), + Listen: option.NewListenAddress(netip.IPv4Unspecified()), ListenPort: serverPort, }, Users: []option.VMessUser{ @@ -279,7 +279,7 @@ func testV2RayTransportNOTLSSelf(t *testing.T, transport *option.V2RayTransportO Tag: "mixed-in", MixedOptions: option.HTTPMixedInboundOptions{ ListenOptions: option.ListenOptions{ - Listen: option.ListenAddress(netip.IPv4Unspecified()), + Listen: option.NewListenAddress(netip.IPv4Unspecified()), ListenPort: clientPort, }, }, @@ -288,7 +288,7 @@ func testV2RayTransportNOTLSSelf(t *testing.T, transport *option.V2RayTransportO Type: C.TypeVMess, VMessOptions: option.VMessInboundOptions{ ListenOptions: option.ListenOptions{ - Listen: option.ListenAddress(netip.IPv4Unspecified()), + Listen: option.NewListenAddress(netip.IPv4Unspecified()), ListenPort: serverPort, }, Users: []option.VMessUser{ diff --git a/test/v2ray_ws_test.go b/test/v2ray_ws_test.go index 7df2932e..c59444a3 100644 --- a/test/v2ray_ws_test.go +++ b/test/v2ray_ws_test.go @@ -66,7 +66,7 @@ func testV2RayWebsocketInbound(t *testing.T, maxEarlyData uint32, earlyDataHeade Type: C.TypeVMess, VMessOptions: option.VMessInboundOptions{ ListenOptions: option.ListenOptions{ - Listen: option.ListenAddress(netip.IPv4Unspecified()), + Listen: option.NewListenAddress(netip.IPv4Unspecified()), ListenPort: serverPort, }, Users: []option.VMessUser{ @@ -160,7 +160,7 @@ func testV2RayWebsocketOutbound(t *testing.T, maxEarlyData uint32, earlyDataHead Tag: "mixed-in", MixedOptions: option.HTTPMixedInboundOptions{ ListenOptions: option.ListenOptions{ - Listen: option.ListenAddress(netip.IPv4Unspecified()), + Listen: option.NewListenAddress(netip.IPv4Unspecified()), ListenPort: clientPort, }, }, diff --git a/test/vless_test.go b/test/vless_test.go index 15d20df0..69380d62 100644 --- a/test/vless_test.go +++ b/test/vless_test.go @@ -42,7 +42,7 @@ func TestVLESS(t *testing.T) { Type: C.TypeMixed, MixedOptions: option.HTTPMixedInboundOptions{ ListenOptions: option.ListenOptions{ - Listen: option.ListenAddress(netip.IPv4Unspecified()), + Listen: option.NewListenAddress(netip.IPv4Unspecified()), ListenPort: clientPort, }, }, @@ -111,7 +111,7 @@ func testVLESSXrayOutbound(t *testing.T, packetEncoding string, flow string) { Type: C.TypeMixed, MixedOptions: option.HTTPMixedInboundOptions{ ListenOptions: option.ListenOptions{ - Listen: option.ListenAddress(netip.IPv4Unspecified()), + Listen: option.NewListenAddress(netip.IPv4Unspecified()), ListenPort: clientPort, }, }, @@ -121,7 +121,7 @@ func testVLESSXrayOutbound(t *testing.T, packetEncoding string, flow string) { Tag: "trojan", TrojanOptions: option.TrojanInboundOptions{ ListenOptions: option.ListenOptions{ - Listen: option.ListenAddress(netip.IPv4Unspecified()), + Listen: option.NewListenAddress(netip.IPv4Unspecified()), ListenPort: otherPort, }, Users: []option.TrojanUser{ @@ -219,7 +219,7 @@ func testVLESSSelf(t *testing.T, flow string) { Tag: "mixed-in", MixedOptions: option.HTTPMixedInboundOptions{ ListenOptions: option.ListenOptions{ - Listen: option.ListenAddress(netip.IPv4Unspecified()), + Listen: option.NewListenAddress(netip.IPv4Unspecified()), ListenPort: clientPort, }, }, @@ -228,7 +228,7 @@ func testVLESSSelf(t *testing.T, flow string) { Type: C.TypeVLESS, VLESSOptions: option.VLESSInboundOptions{ ListenOptions: option.ListenOptions{ - Listen: option.ListenAddress(netip.IPv4Unspecified()), + Listen: option.NewListenAddress(netip.IPv4Unspecified()), ListenPort: serverPort, }, Users: []option.VLESSUser{ @@ -294,7 +294,7 @@ func testVLESSSelfTLS(t *testing.T, flow string) { Tag: "mixed-in", MixedOptions: option.HTTPMixedInboundOptions{ ListenOptions: option.ListenOptions{ - Listen: option.ListenAddress(netip.IPv4Unspecified()), + Listen: option.NewListenAddress(netip.IPv4Unspecified()), ListenPort: clientPort, }, }, @@ -303,7 +303,7 @@ func testVLESSSelfTLS(t *testing.T, flow string) { Type: C.TypeVLESS, VLESSOptions: option.VLESSInboundOptions{ ListenOptions: option.ListenOptions{ - Listen: option.ListenAddress(netip.IPv4Unspecified()), + Listen: option.NewListenAddress(netip.IPv4Unspecified()), ListenPort: serverPort, }, Users: []option.VLESSUser{ @@ -326,7 +326,7 @@ func testVLESSSelfTLS(t *testing.T, flow string) { Tag: "trojan", TrojanOptions: option.TrojanInboundOptions{ ListenOptions: option.ListenOptions{ - Listen: option.ListenAddress(netip.IPv4Unspecified()), + Listen: option.NewListenAddress(netip.IPv4Unspecified()), ListenPort: otherPort, }, Users: []option.TrojanUser{ @@ -414,7 +414,7 @@ func testVLESSXrayInbound(t *testing.T, flow string) { Type: C.TypeVLESS, VLESSOptions: option.VLESSInboundOptions{ ListenOptions: option.ListenOptions{ - Listen: option.ListenAddress(netip.IPv4Unspecified()), + Listen: option.NewListenAddress(netip.IPv4Unspecified()), ListenPort: serverPort, }, Users: []option.VLESSUser{ @@ -437,7 +437,7 @@ func testVLESSXrayInbound(t *testing.T, flow string) { Tag: "trojan", TrojanOptions: option.TrojanInboundOptions{ ListenOptions: option.ListenOptions{ - Listen: option.ListenAddress(netip.IPv4Unspecified()), + Listen: option.NewListenAddress(netip.IPv4Unspecified()), ListenPort: otherPort, }, Users: []option.TrojanUser{ @@ -464,7 +464,7 @@ func testVLESSXrayInbound(t *testing.T, flow string) { Tag: "mixed-in", MixedOptions: option.HTTPMixedInboundOptions{ ListenOptions: option.ListenOptions{ - Listen: option.ListenAddress(netip.IPv4Unspecified()), + Listen: option.NewListenAddress(netip.IPv4Unspecified()), ListenPort: otherClientPort, }, }, diff --git a/test/vmess_test.go b/test/vmess_test.go index dd783f84..add05e76 100644 --- a/test/vmess_test.go +++ b/test/vmess_test.go @@ -185,7 +185,7 @@ func testVMessInboundWithV2Ray(t *testing.T, security string, alterId int, authe Type: C.TypeVMess, VMessOptions: option.VMessInboundOptions{ ListenOptions: option.ListenOptions{ - Listen: option.ListenAddress(netip.IPv4Unspecified()), + Listen: option.NewListenAddress(netip.IPv4Unspecified()), ListenPort: serverPort, }, Users: []option.VMessUser{ @@ -232,7 +232,7 @@ func testVMessOutboundWithV2Ray(t *testing.T, security string, globalPadding boo Type: C.TypeMixed, MixedOptions: option.HTTPMixedInboundOptions{ ListenOptions: option.ListenOptions{ - Listen: option.ListenAddress(netip.IPv4Unspecified()), + Listen: option.NewListenAddress(netip.IPv4Unspecified()), ListenPort: clientPort, }, }, @@ -267,7 +267,7 @@ func testVMessSelf(t *testing.T, security string, alterId int, globalPadding boo Tag: "mixed-in", MixedOptions: option.HTTPMixedInboundOptions{ ListenOptions: option.ListenOptions{ - Listen: option.ListenAddress(netip.IPv4Unspecified()), + Listen: option.NewListenAddress(netip.IPv4Unspecified()), ListenPort: clientPort, }, }, @@ -276,7 +276,7 @@ func testVMessSelf(t *testing.T, security string, alterId int, globalPadding boo Type: C.TypeVMess, VMessOptions: option.VMessInboundOptions{ ListenOptions: option.ListenOptions{ - Listen: option.ListenAddress(netip.IPv4Unspecified()), + Listen: option.NewListenAddress(netip.IPv4Unspecified()), ListenPort: serverPort, }, Users: []option.VMessUser{ diff --git a/test/wireguard_test.go b/test/wireguard_test.go index fdffe0b8..293b6ae7 100644 --- a/test/wireguard_test.go +++ b/test/wireguard_test.go @@ -26,7 +26,7 @@ func TestWireGuard(t *testing.T) { Type: C.TypeMixed, MixedOptions: option.HTTPMixedInboundOptions{ ListenOptions: option.ListenOptions{ - Listen: option.ListenAddress(netip.IPv4Unspecified()), + Listen: option.NewListenAddress(netip.IPv4Unspecified()), ListenPort: clientPort, }, },