二维码
搬瓦工 locvps
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("关闭连接失败")
        }
}
无聊在家,写了个调用v2ray接口的demo,各位mjj可以参考。初学go,感觉这语言挺好用啊。
locvps
评论专区
  • 昵 称必填
  • 邮 箱必填
  • 网 址选填
◎已有 0 人评论
BudgetVM
作者介绍
总干事

总干事

总干事作为本站编辑,主要负责VPS优惠、域名优惠和站长百科三个栏目。
80vps henghost
30天热门
budgetvm sugarhosts
二维码
点击关闭
  • 在线客服1

    在线客服2

    在线客服3

分享:

支付宝

微信