|
本帖最后由 king51 于 2020-2-26 15:53 编辑
- package main
- import (
- "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("关闭连接失败")
- }
- }
复制代码
初学go,感觉这语言挺好用啊 |
|