king51 大佬有话说 :
无聊在家,写了个调用v2ray接口的demo,各位mjj可以参考
本帖最后由 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: "[email protected]", // 用户邮箱,删除和统计要用到
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: "[email protected]", // 用户邮箱地址
}),
})
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>>>>>>traffic>>>uplink
特定用户的上行流量,单位字节。
user>>>>>>traffic>>>downlink
特定用户的下行流量,单位字节。
inbound>>>>>>traffic>>>uplink
特定入站代理的上行流量,单位字节。
inbound>>>>>>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("关闭连接失败")
}
}
yc022t初学go,感觉这语言挺好用啊
hasamol7468 大佬有话说 :
可惜不是拍黄皮
king51 大佬有话说 :
hasamol7468 大佬有话说 : 2020-2-26 15:50
可惜不是拍黄皮
yc007t php毕竟不是谷歌自家 调用grpc麻烦
korbin 大佬有话说 :
派黄片很好
wuxjian 大佬有话说 :
本帖最后由 wuxjian 于 2020-2-26 16:02 编辑
go error写的很恶心,我也写过一些
hasamol7468 大佬有话说 :
king51 大佬有话说 : 2020-2-26 15:53
php毕竟不是谷歌自家 调用grpc麻烦
的确,之前整过,很头大只好整了个中间件
风铃 大佬有话说 :
king51 大佬有话说 : 2020-2-26 15:53
php毕竟不是谷歌自家 调用grpc麻烦
也不是很麻烦 有grpc一键生成各种语言的, 转成php和js一样用
目前我用的js调用的