Skip to content

Instantly share code, notes, and snippets.

@mkmark
Forked from kallydev/main.go
Created August 30, 2022 14:43
Show Gist options
  • Select an option

  • Save mkmark/015153c08acab7996a137bf27930ba56 to your computer and use it in GitHub Desktop.

Select an option

Save mkmark/015153c08acab7996a137bf27930ba56 to your computer and use it in GitHub Desktop.

Revisions

  1. @kallydev kallydev revised this gist Nov 3, 2020. No changes.
  2. @kallydev kallydev revised this gist Nov 3, 2020. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion main.go
    Original file line number Diff line number Diff line change
    @@ -48,7 +48,7 @@ func main() {
    StreamSettings: &internet.StreamConfig{
    ProtocolName: "TCP",
    TransportSettings: []*internet.TransportConfig{},
    SecurityType: "tls",
    SecurityType: "TLS",
    SecuritySettings: []*serial.TypedMessage{
    serial.ToTypedMessage(&conf.TLSConfig{
    Insecure: false,
  3. @kallydev kallydev created this gist Nov 3, 2020.
    119 changes: 119 additions & 0 deletions main.go
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,119 @@
    package main

    import (
    "context"
    "fmt"
    "google.golang.org/grpc"
    "log"
    "v2ray.com/core"
    "v2ray.com/core/app/proxyman"
    "v2ray.com/core/app/proxyman/command"
    "v2ray.com/core/common/net"
    "v2ray.com/core/common/protocol"
    "v2ray.com/core/common/serial"
    "v2ray.com/core/infra/conf"
    "v2ray.com/core/proxy/vmess"
    "v2ray.com/core/proxy/vmess/inbound"
    "v2ray.com/core/transport/internet"
    )

    func main() {
    conn, err := grpc.Dial(fmt.Sprintf("%s:%d", "127.0.0.1", 50051), grpc.WithInsecure())
    if err != nil {
    log.Panicln(err)
    }
    client := command.NewHandlerServiceClient(conn)
    _, err = client.AddInbound(context.Background(), &command.AddInboundRequest{
    Inbound: &core.InboundHandlerConfig{
    Tag: "inbound_vmess",
    ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
    PortRange: &net.PortRange{
    From: 443,
    To: 443,
    },
    Listen: &net.IPOrDomain{
    Address: &net.IPOrDomain_Ip{
    Ip: []byte{0, 0, 0, 0},
    },
    },
    AllocationStrategy: &proxyman.AllocationStrategy{
    Type: proxyman.AllocationStrategy_Always,
    Concurrency: &proxyman.AllocationStrategy_AllocationStrategyConcurrency{
    Value: 1,
    },
    // Refresh: &proxyman.AllocationStrategy_AllocationStrategyRefresh{
    // Value: 2,
    // },
    },
    StreamSettings: &internet.StreamConfig{
    ProtocolName: "TCP",
    TransportSettings: []*internet.TransportConfig{},
    SecurityType: "tls",
    SecuritySettings: []*serial.TypedMessage{
    serial.ToTypedMessage(&conf.TLSConfig{
    Insecure: false,
    InsecureCiphers: false,
    Certs: []*conf.TLSCertConfig{
    {
    CertFile: "/etc/ssl/certs/example.crt",
    // CertStr: nil,
    KeyFile: "/etc/ssl/private/example.key",
    // KeyStr: nil,
    Usage: "encipherment",
    },
    },
    ServerName: "example.com",
    ALPN: &conf.StringList{
    "h2",
    "http/1.1",
    },
    DiableSystemRoot: false,
    }),
    },
    SocketSettings: &internet.SocketConfig{
    Mark: 0,
    Tfo: internet.SocketConfig_Disable,
    Tproxy: internet.SocketConfig_Off,
    ReceiveOriginalDestAddress: false,
    BindAddress: []byte{0, 0, 0, 0},
    BindPort: 443,
    },
    },
    ReceiveOriginalDestination: false,
    SniffingSettings: &proxyman.SniffingConfig{
    Enabled: true,
    DestinationOverride: []string{
    "http",
    "tls",
    },
    },
    }),
    ProxySettings: serial.ToTypedMessage(&inbound.Config{
    User: []*protocol.User{
    {
    Level: 0,
    Email: "example@email.com",
    Account: serial.ToTypedMessage(&vmess.Account{
    Id: "5e79bb8f-a1f9-487f-a8ef-24e27bf5cfc7",
    AlterId: 0,
    SecuritySettings: &protocol.SecurityConfig{
    Type: protocol.SecurityType_AUTO,
    },
    }),
    },
    },
    Default: &inbound.DefaultConfig{
    AlterId: 0,
    Level: 0,
    },
    Detour: &inbound.DetourConfig{
    To: "detour_tag",
    },
    SecureEncryptionOnly: true,
    }),
    },
    })
    if err != nil {
    log.Panicln(err)
    }
    }