这里以CF的API为例:

def ip_latency_test(ip,port=443):
    tag='IP_Latency_TEST'
    print_with_tag(tag,['Prepare IP latency test for ip',ip,'Port',str(port)])
    s_test = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s_test.settimeout(10)
    s_start = time.time()
    try:
        s_test.connect((ip,port))
        s_test.shutdown(socket.SHUT_RD)
    except Exception as e:
        print_with_tag(tag,['Error:',e])
        return None
    s_stop = time.time()
    s_runtime = '%.2f' % (1000 * (s_stop - s_start))
    print_with_tag(tag,[ip,'Latency:',s_runtime])
    return float(s_runtime)

def get_dns_data_from_doh_server(name, type):
    '''
    :param name: str ['pixiv.net'...]
    :param type: str ['A','AAAA'...]
    :return:str
    FAQ:https://developers.cloudflare.com/1.1.1.1/dns-over-https/json-format/
    '''
    tag = 'DoH_Request_Format'
    doh_server = 'https://cloudflare-dns.com/dns-query?'
    doh_header = {'accept': 'application/dns-json'}
    final_doh_request_url = doh_server + 'name=' + name + '&type=' + type
    res = json.loads(requests.get(final_doh_request_url, headers=doh_header).text)['Answer']
    d_list=[]
    for per_dns_data in res:
        if per_dns_data['type'] == 1:
            a_record = per_dns_data['data']
            d_list.append(a_record)
            print_with_tag(tag,['Index Of DNS Record:',str(len(d_list))])
            print_with_tag(tag, ['Domain', name, 'A record found.'])
            print_with_tag(tag, ['A record:', a_record])
    # Init test
    ip_latency={}
    for per_ip in d_list:
        ip_latency[str(ip_latency_test(per_ip))] = per_ip
    print_with_tag(tag,'Selecting best ip node..')
    all_latency_keys = list(ip_latency.keys())
    all_latency_keys.sort()
    best_latency=all_latency_keys[0]
    best_node=ip_latency[best_latency]
    print_with_tag(tag,['Selected:',best_node,'for lowest latency:',best_latency])
    return best_nodeCode language: PHP (php)

END

分类: PYTHON

0 条评论

发表回复

Avatar placeholder

您的电子邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据