全球主机交流论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

CeraNetworks网络延迟测速工具IP归属甄别会员请立即修改密码
查看: 2385|回复: 10

无聊在家,写了个调用v2ray接口的demo,各位mjj可以参考

[复制链接]
发表于 2020-2-26 15:49:20 | 显示全部楼层 |阅读模式
本帖最后由 king51 于 2020-2-26 15:53 编辑
  1. package main

  2. import (
  3.         "context"
  4.         "fmt"
  5.         "github.com/labstack/gommon/log"
  6.         "github.com/satori/go.uuid"
  7.         "google.golang.org/grpc"
  8.         // proxy管理服务
  9.         proxymanService "v2ray.com/core/app/proxyman/command"
  10.         // 统计服务
  11.         statsService "v2ray.com/core/app/stats/command"
  12.         "v2ray.com/core/common/protocol"
  13.         "v2ray.com/core/common/serial"
  14.         "v2ray.com/core/proxy/vmess"
  15. )

  16. // 添加用户
  17. func addUser(conn *grpc.ClientConn) error {
  18.         client := proxymanService.NewHandlerServiceClient(conn)
  19.         userUUID := uuid.NewV4().String() //使用UUID库生成一个UUID
  20.         resp, err := client.AlterInbound(context.Background(), &proxymanService.AlterInboundRequest{
  21.                 Tag: "proxy", // 要添加用户的tag,目前只支持vmess协议
  22.                 Operation: serial.ToTypedMessage(&proxymanService.AddUserOperation{
  23.                         User: &protocol.User{
  24.                                 Level: 0,                 // 用户等级
  25.                                 Email: "usermail@qq.com", // 用户邮箱,删除和统计要用到
  26.                                 Account: serial.ToTypedMessage(&vmess.Account{
  27.                                         Id:               userUUID,                                                   //用户UUID
  28.                                         AlterId:          4,                                                          // 额外ID
  29.                                         SecuritySettings: &protocol.SecurityConfig{Type: protocol.SecurityType_AUTO}, // 安全设置,auto为自动判断加密协议
  30.                                 }),
  31.                         },
  32.                 }),
  33.         })
  34.         if err != nil {
  35.                 return err
  36.         }
  37.         fmt.Println(resp)
  38.         fmt.Println(userUUID)
  39.         return nil
  40. }

  41. // 删除用户
  42. func removeUser(conn *grpc.ClientConn) error {
  43.         client := proxymanService.NewHandlerServiceClient(conn)
  44.         resp, err := client.AlterInbound(context.Background(), &proxymanService.AlterInboundRequest{
  45.                 Tag: "proxy",
  46.                 Operation: serial.ToTypedMessage(&proxymanService.RemoveUserOperation{
  47.                         Email: "usermail@qq.com", // 用户邮箱地址
  48.                 }),
  49.         })
  50.         if err != nil {
  51.                 return err
  52.         }
  53.         fmt.Println(resp)
  54.         return nil
  55. }

  56. // 获取用户流量
  57. func queryUserTraffic(conn *grpc.ClientConn) error {
  58.         client := statsService.NewStatsServiceClient(conn)
  59.         resp, err := client.QueryStats(context.Background(), &statsService.QueryStatsRequest{
  60.                 /*
  61.                         user>>>[email]>>>traffic>>>uplink
  62.                         特定用户的上行流量,单位字节。
  63.                         user>>>[email]>>>traffic>>>downlink
  64.                         特定用户的下行流量,单位字节。
  65.                         inbound>>>[tag]>>>traffic>>>uplink
  66.                         特定入站代理的上行流量,单位字节。
  67.                         inbound>>>[tag]>>>traffic>>>downlink
  68.                         特定入站代理的下行流量,单位字节。
  69.                 */
  70.                 Pattern: "user", // 筛选用户表达式
  71.                 Reset_:  false,  // 查询完成后是否重置流量
  72.         })
  73.         if err != nil {
  74.                 return err
  75.         }
  76.         // 获取返回值中的流量信息
  77.         stat := resp.GetStat()
  78.         // 返回的是一个数组,对其进行遍历输出
  79.         for _, e := range stat {
  80.                 fmt.Println(e)
  81.         }
  82.         return nil
  83. }

  84. func main() {
  85.         // 连接grpc服务
  86.         conn, err := grpc.Dial("IP:port", grpc.WithInsecure())
  87.         if err != nil {
  88.                 panic(err)
  89.         }
  90.         //err = queryUserTraffic(conn)
  91.         err = addUser(conn)
  92.         //err = removeUser(conn)
  93.         if err != nil {
  94.                 log.Info(err)
  95.         }
  96.         if err = conn.Close(); err != nil {
  97.                 log.Info("关闭连接失败")
  98.         }
  99. }
复制代码

  初学go,感觉这语言挺好用啊
发表于 2020-2-26 15:50:53 来自手机 | 显示全部楼层
可惜不是拍黄皮
 楼主| 发表于 2020-2-26 15:53:23 | 显示全部楼层

php毕竟不是谷歌自家 调用grpc麻烦
发表于 2020-2-26 15:54:18 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2020-2-26 16:01:14 | 显示全部楼层
本帖最后由 wuxjian 于 2020-2-26 16:02 编辑

go error写的很恶心,我也写过一些
发表于 2020-2-26 17:11:32 | 显示全部楼层
king51 发表于 2020-2-26 15:53
php毕竟不是谷歌自家 调用grpc麻烦

的确,之前整过,很头大只好整了个中间件
发表于 2020-2-26 17:14:50 | 显示全部楼层
king51 发表于 2020-2-26 15:53
php毕竟不是谷歌自家 调用grpc麻烦

也不是很麻烦 有grpc一键生成各种语言的, 转成php和js一样用
目前我用的js调用的
发表于 2020-2-27 12:18:34 | 显示全部楼层
大佬大佬!话说 v.2.r.a.y api 的文档在哪里查看啊?
 楼主| 发表于 2020-2-27 15:44:14 | 显示全部楼层
XiFanU 发表于 2020-2-27 12:18
大佬大佬!话说 v.2.r.a.y api 的文档在哪里查看啊?

没有文档,自己参考谷歌上教程和demo做就行
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|全球主机交流论坛

GMT+8, 2024-4-25 23:17 , Processed in 0.063226 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表