吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 5509|回复: 21
收起左侧

[原创工具] 简单延迟测试软件-修复github访问卡顿和谷歌翻译问题

  [复制链接]
aa7088414 发表于 2022-12-17 09:41
前几天因用过某大佬的谷歌翻译修复工具,感觉挺有意思。所以用python重写了一个类似版本,此工具支持使用配置文件测试任何网站各个IP的延迟,以此取最优IP,达到修复网站卡顿或者打不开的效果。
工具原理是基于PING测试,代码在下面开源。(写的有点乱,请自动无视
附带两个写好的配置,github和谷歌翻译的。有自己写好的也可以发给我,个人精力有限。

源码:
[Python] 纯文本查看 复制代码
import json
import logging
import os
import time

from ping3 import ping


def Set_json(dict, fname):
    """
    写出字典数据到文件
    :param dict: 字典变量
    :param fname: 写出到的文件名
    :return:
    """
    f = open(fname, 'w', encoding='utf-8')
    f.write(json.dumps(dict, ensure_ascii=False, indent=4))
    f.close()
    return True


def Get_json(fname):
    """
    读取字典文件
    :param fname: 字典文件(json)
    :return: 读取到的字典数据
    """
    f = open(fname, 'r', encoding='utf-8')
    js = json.loads(f.read())
    f.close()
    return js


class PingCs:
    host = ''
    ip_list = []
    out_dict = {}
    jsonip_dcit = {}
    return_dict={}

    def __init__(self):
        logging.basicConfig(level=logging.DEBUG)

    def read_iptxt(self, txt_pwd):
        """
        读取txt简易版配置文件,第一行域名,第2行及以后IP
        :param txt_pwd:
        :return:
        """
        txt_list = open(txt_pwd, 'r').read().split('\n')
        self.jsonip_dcit = {txt_pwd: {"host": txt_list[0], "ip_list": txt_list[1:]}}

    def read_ipjson(self, jsonpwd):
        """
        读取json配置文件,格式为{'name':{host:域名,ip_list:['ip','ip2'....]}}
        :param jsonpwd:
        :return:
        """
        self.jsonip_dcit = Get_json(jsonpwd)

    def run_pings(self, ip_list=None):
        """
        ping ip列表,写出到out_dict
        :param ip_list: ['ip','ip2'....]
        :return:
        """
        if ip_list is None:
            ip_list = self.ip_list
        out_dict = {}
        for i in ip_list:
            out_dict[i] = self.ping_host(i)
            logging.info(f'ip:{i} 延迟:{out_dict[i]}')
            self.out_dict = out_dict

    def ping_host(self, ip_address):
        """
        ping ip地址
        :param ip_address: str ip地址
        :return:
        """
        response = ping(ip_address)

        if response is not None:
            delay = int(response * 1000)
            return delay
        else:
            return 9999

    def min_ping(self, data_dict=None):
        """
        取out_dict的最小值
        :param data_dict:
        :return:
        """
        if data_dict is None:
            data_dict = self.out_dict
        min_key = None
        min_value = 99999
        for i in data_dict.keys():
            if data_dict[i] < min_value:
                min_key = i
                min_value = data_dict[i]
        logging.info(f"最优ip为{min_key},延迟{min_value}秒")
        time.sleep(0.1)
        return min_key

    def dctostr(self, host, ip):
        return f'{host}    {ip}'

    def writehost(self, hoststr):
        pass

    def run(self):

        files = os.listdir('./')
        for fileid in range(len(files) - 1, -1, -1):
            if '.txt' not in files[fileid] and '.json' not in files[fileid]:
                files.remove(files[fileid])
        print('请输入序号,选择要加载的配置文件。')
        for id in range(len(files)):
            print(f'{id} : {files[id]}')

        fileid = int(input('请输入序号:'))
        logging.info(f'开始测试配置:{files[fileid]}\n')
        if '.txt' in files[fileid]:
            self.read_iptxt(files[fileid])
        if '.json' in files[fileid]:
            self.read_ipjson(files[fileid])
        # print(json.dumps(self.jsonip_dcit) )

        for key in self.jsonip_dcit.values():
            print(f'测试网址:{key["host"]}')
            self.host=key['host']
            self.ip_list=key['ip_list']
            self.run_pings()
            time.sleep(0.2)
            min_ip=self.min_ping()
            logging.info('\n\n')
            self.return_dict[self.host]=min_ip
        print('\n测速完成,请将以下内容写入host文件尾部\n\n')
        time.sleep(0.5)
        for hsot in self.return_dict.keys():
            print(f'{self.return_dict[hsot]}   {hsot}')
        input("\n\n按任意键结束程序。。。")


PingCs().run()


运行截图:
Dingtalk_20221216121645.jpg

有条件的可以直接用源码,或者自行编译。不想费劲的可以下载编译好的。

下载地址:https://wwtc.lanzoue.com/b012dk74d密码:3orm
解压密码:52pojie

免费评分

参与人数 10吾爱币 +13 热心值 +10 收起 理由
liusha-tj + 1 很好用
冷丶眸 + 1 + 1 谢谢@Thanks!
wq121314 + 1 我很赞同!
z7138910 + 1 + 1 热心回复!
yuanz8 + 1 谢谢@Thanks!
invest8090 + 1 + 1 谢谢@Thanks!
抱薪风雪雾 + 1 + 1 谢谢@Thanks!
Lyy666 + 1 + 1 热心回复!
DCWeil233 + 1 + 1 谢谢@Thanks!
风之暇想 + 7 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

LHCAILGT 发表于 2022-12-17 23:59
很好,非常感谢分享
头像被屏蔽
hwxq43 发表于 2022-12-18 06:18
mt19921009 发表于 2022-12-18 16:45
jxpengyong 发表于 2022-12-19 05:55
思路挺好的
Else586 发表于 2022-12-19 10:36
感谢分享
LHCAILGT 发表于 2022-12-19 11:15
很不错,感谢分享
yuanz8 发表于 2022-12-19 16:51
感谢分享
uy98 发表于 2022-12-19 16:57
感谢楼主分享!
ypwl21 发表于 2022-12-19 17:42

很好,非常感谢分享
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-1 15:28

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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