Last active
February 2, 2017 12:05
-
-
Save silviot/9854d596880ff3b84aa635be0c3f1c97 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python | |
from dns import resolver # dnspython | |
from dns import reversename | |
from dns import rdatatype | |
from ntplib import NTPClient # ntplib | |
from ntplib import NTPException | |
NTP_NAME = '0.europe.pool.ntp.org' | |
NTP_NAME = '0.us.pool.ntp.org' | |
QUERIES = 100 | |
def main(): | |
resolver.get_default_resolver().nameservers = [res.address for res in resolver.query('f.ntpns.org.')] | |
candidates = set() | |
for _ in range(QUERIES): | |
candidates.update(el.address for el in resolver.query(NTP_NAME)) | |
ntp = NTPClient() | |
times = {} | |
for el in candidates: | |
try: | |
resp = ntp.request(el, version=3) | |
except NTPException: | |
pass | |
times[el] = resp.delay | |
sorted_ips = sorted(times.items(), key=lambda x: x[1]) | |
resolver.get_default_resolver().nameservers = ['8.8.8.8', '8.8.4.4'] | |
selected_ips = [a[0] for a in sorted_ips[:10]] | |
selected_names = [] | |
for ip in selected_ips: | |
try: | |
res = resolver.query(reversename.from_address(ip), rdtype=rdatatype.PTR) | |
selected_names.append(res[0].to_text()) | |
except resolver.NXDOMAIN: | |
pass | |
print('These are the best servers I could find:\n{}'.format('\n'.join(selected_names))) | |
if __name__ == '__main__': | |
main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment