feat(dnscrypt_to_smartdns): add doh test and only add valid doh server
This commit is contained in:
parent
d2613034a1
commit
b6e605e50f
|
@ -1,6 +1,8 @@
|
|||
import logging
|
||||
import subprocess
|
||||
from urllib.request import urlopen
|
||||
from http.client import HTTPException
|
||||
from urllib.error import URLError
|
||||
from urllib.request import urlopen, Request
|
||||
|
||||
from dnscrypt import parse, DNSoverHTTPS
|
||||
|
||||
|
@ -55,8 +57,50 @@ def get_not_china_doh_list():
|
|||
))
|
||||
|
||||
|
||||
def get_smartdns_config():
|
||||
# def build_dns_query(domain, record_type):
|
||||
# # require: dnspython
|
||||
# import dns.message
|
||||
# dnsq = dns.message.make_query(
|
||||
# qname=domain,
|
||||
# rdtype=record_type,
|
||||
# want_dnssec=False,
|
||||
# )
|
||||
# return dnsq
|
||||
|
||||
TESTED_URL = set()
|
||||
|
||||
|
||||
def doh_tester(hostname, path):
|
||||
# www.google.com A
|
||||
dnsq = b'\xf9\x04\x01\x00\x00\x01\x00\x00\x00\x00\x00\x00\x03www\x06google\x03com\x00\x00\x01\x00\x01'
|
||||
url = 'https://' + hostname + path
|
||||
if url in TESTED_URL:
|
||||
return False
|
||||
request = Request(url, data=dnsq)
|
||||
request.add_header('accept', 'application/dns-message')
|
||||
request.add_header('content-type', 'application/dns-message')
|
||||
try:
|
||||
with urlopen(request, timeout=3) as response:
|
||||
response.read()
|
||||
print('{url}\tok'.format(url=url))
|
||||
TESTED_URL.add(url)
|
||||
return True
|
||||
except (URLError, TimeoutError, ConnectionError, HTTPException) as e:
|
||||
print('{url}\tfailed\t{error}'.format(url=url, error=e))
|
||||
TESTED_URL.add(url)
|
||||
return False
|
||||
|
||||
|
||||
def get_final_doh_list():
|
||||
stamps = get_not_china_doh_list()
|
||||
return list(filter(
|
||||
lambda x: doh_tester(x.hostname, x.path),
|
||||
stamps
|
||||
))
|
||||
|
||||
|
||||
def get_smartdns_config():
|
||||
stamps = get_final_doh_list()
|
||||
lines = set(map(
|
||||
lambda x: 'server-https https://' + x.hostname + x.path + ' -group GFW -exclude-default-group',
|
||||
stamps
|
||||
|
|
Loading…
Reference in a new issue