|
本帖最后由 king51 于 2020-2-26 15:53 编辑
[ol]package mainimport ( "context" "fmt" "github.com/labstack/gommon/log" "github.com/satori/go.uuid" "google.golang.org/grpc" // proxy管理服务 proxymanService "v2ray.com/core/app/proxyman/command" // 统计服务 statsService "v2ray.com/core/app/stats/command" "v2ray.com/core/common/protocol" "v2ray.com/core/common/serial" "v2ray.com/core/proxy/vmess")// 添加用户func addUser(conn *grpc.ClientConn) error { client := proxymanService.NewHandlerServiceClient(conn) userUUID := uuid.NewV4().String() //使用UUID库生成一个UUID resp, err := client.AlterInbound(context.Background(), &proxymanService.AlterInboundRequest{ Tag: "proxy", // 要添加用户的tag,目前只支持vmess协议 Operation: serial.ToTypedMessage(&proxymanService.AddUserOperation{ User: &protocol.User{ Level: 0, // 用户等级 Email: "usermail@qq.com", // 用户邮箱,删除和统计要用到 Account: serial.ToTypedMessage(&vmess.Account{ Id: userUUID, //用户UUID AlterId: 4, // 额外ID SecuritySettings: &protocol.SecurityConfig{Type: protocol.SecurityType_AUTO}, // 安全设置,auto为自动判断加密协议 }), }, }), }) if err != nil { return err } fmt.Println(resp) fmt.Println(userUUID) return nil}// 删除用户func removeUser(conn *grpc.ClientConn) error { client := proxymanService.NewHandlerServiceClient(conn) resp, err := client.AlterInbound(context.Background(), &proxymanService.AlterInboundRequest{ Tag: "proxy", Operation: serial.ToTypedMessage(&proxymanService.RemoveUserOperation{ Email: "usermail@qq.com", // 用户邮箱地址 }), }) if err != nil { return err } fmt.Println(resp) return nil}// 获取用户流量func queryUserTraffic(conn *grpc.ClientConn) error { client := statsService.NewStatsServiceClient(conn) resp, err := client.QueryStats(context.Background(), &statsService.QueryStatsRequest{ /* user>>>[email]>>>traffic>>>uplink 特定用户的上行流量,单位字节。 user>>>[email]>>>traffic>>>downlink 特定用户的下行流量,单位字节。 inbound>>>[tag]>>>traffic>>>uplink 特定入站代理的上行流量,单位字节。 inbound>>>[tag]>>>traffic>>>downlink 特定入站代理的下行流量,单位字节。 */ Pattern: "user", // 筛选用户表达式 Reset_: false, // 查询完成后是否重置流量 }) if err != nil { return err } // 获取返回值中的流量信息 stat := resp.GetStat() // 返回的是一个数组,对其进行遍历输出 for _, e := range stat { fmt.Println(e) } return nil}func main() { // 连接grpc服务 conn, err := grpc.Dial("IP:port", grpc.WithInsecure()) if err != nil { panic(err) } //err = queryUserTraffic(conn) err = addUser(conn) //err = removeUser(conn) if err != nil { log.Info(err) } if err = conn.Close(); err != nil { log.Info("关闭连接失败") }}[/ol]复制代码
初学go,感觉这语言挺好用啊 |
|