【python】查看v2ray流量统计脚本
579 字
3 分钟
【python】查看v2ray流量统计脚本

查看v2ray多用户流量统计
使用前需要开启v2ray自带的统计工具,配置方法:https://guide.v2fly.org/advanced/traffic.html#%E9%85%8D%E7%BD%AE%E7%BB%9F%E8%AE%A1%E5%8A%9F%E8%83%BD
本脚本使用email作为用户标识,使用tag作为组标识
获取
- Github
wget https://raw.githubusercontent.com/Rehtt/v2ray-tools/main/v2ray-flow.py- 复制下方代码
使用
v2ray-flow.py [-h] [-g <tag>] [-c <file>] [-s <server>]默认显示全部用户
-h,--help 显示帮助-g <tag> 显示组的流量 -g A (显示tag:A组的流量)
-c <file> 输入v2ray配置文件 -c /etc/v2ray/config.json
-s <server> 输入v2ctl api server地址 -s 127.0.0.1:53844代码
#!/bin/python3
# Created by Rehtt on 2020/12/11# 查看v2ray多用户流量统计# 使用前需要开启v2ray自带的统计工具,配置方法:https://guide.v2fly.org/advanced/traffic.html#%E9%85%8D%E7%BD%AE%E7%BB%9F%E8%AE%A1%E5%8A%9F%E8%83%BD# 本脚本使用email作为用户标识,使用tag作为组标识
import reimport osimport jsonimport getoptimport sys
v2ConfigFile = '/etc/v2ray/config.json' # v2ray配置文件位置v2ctlServer = '127.0.0.1:53844' # v2ctl api配置信息
def dataSize(size, i=0): if size > 1e3: size /= 1e3 s = dataSize(size, i+1) else: size = round(size, 2) if i == 1: s = str(size)+'KB' elif i == 2: s = str(size)+'MB' elif i >= 3: s = str(size)+'GB' return s
def red(f): return '\033[31m'+f+'\033[0m'
def help(): print("v2ray-flow.py [-h] [-g <tag>] [-c <file>] [-s <server>]") print("默认显示全部用户\n") print("-h,--help\t显示帮助") print("-g <tag>\t显示组的流量") print("\t-g A\t\t(显示tag:A组的流量)\n") # print("-u <email>\t显示单个用户流量") # print("\t-u rehtt@qq.com\t(显示email为rehtt@qq.com的流量)\n") print("-c <file>\t输入v2ray配置文件") print("\t-c /etc/v2ray/config.json\n") print("-s <server>\t输入v2ctl api server地址") print("\t-s 127.0.0.1:53844")
def getDownUp(name, res): i = 0 z = 0 down = 0 up = 0 try: for r in res: i += 1 if name in r: z += 1 if 'downlink' in r: down = dataSize(float(re.sub('\D', '', res[i]))) else: up = dataSize(float(re.sub('\D', '', res[i]))) if z == 2: break except: pass return down, up
def main(argv): global v2ctlServer, v2ConfigFile c = '/usr/bin/v2ray/v2ctl api --server={server} StatsService.QueryStats \'pattern: "{q}" reset: false\'' try: opts, args = getopt.getopt(argv, "hg:c:s:u:", ["help"]) except getopt.GetoptError: help() sys.exit(2) q = 'user' G = 0 for opt, arg in opts: if opt in ('-h', '--help'): help() sys.exit() elif opt == '-g': q = arg G = 1 # elif opt == '-u': # q = arg # G = 2 if opt == '-c': v2ConfigFile = arg if opt == '-s': v2ctlServer = arg tags = {}
c = c.format(server=v2ctlServer, q=q) res = os.popen(c).readlines() if G == 0: with open(v2ConfigFile, 'r') as f: data = json.load(f) for i in data['inbounds']: if i['tag'] != 'api': emails = [] for email in i['settings']['clients']: emails.append(email['email']) tags[i['tag']] = emails for tag in tags: for email in tags[tag]: down, up = getDownUp(email, res) print('Email:', red(email), '\tTag:'+red(tag)) print('上传:', up, '\t下载:', down, '\n') else: if G==1: print('Tag:', red(q)) down, up = getDownUp(q, res) # else: # print('Email:', red(q)) print('上传:', up, '\t下载:', down, '\n')
if __name__ == "__main__": main(sys.argv[1:])支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!
相关文章智能推荐
1
服务脚本
Python脚本2018-06-13
2
【python】查看Linux实时网速
Python脚本2018-07-15
3
Python中sys.arg[]的用法
Python笔记2018-04-12
4
Python项目打包成exe文件
Python笔记2017-12-18
5
【Python】安装Dlib人脸识别库
Linux笔记2018-09-30
随机文章随机推荐















加载更多…