Skip to content

Instantly share code, notes, and snippets.

@silviot
Last active February 2, 2017 12:05
Show Gist options
  • Save silviot/9854d596880ff3b84aa635be0c3f1c97 to your computer and use it in GitHub Desktop.
Save silviot/9854d596880ff3b84aa635be0c3f1c97 to your computer and use it in GitHub Desktop.
#!/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