From 87cea8c04c10da7aeed8c6cc30b233947bf2a535 Mon Sep 17 00:00:00 2001 From: Babak Farrokhi Date: Sun, 23 Apr 2017 13:23:17 +0430 Subject: [PATCH] Improve query time measurement accuracy and display --- dnseval.py | 4 ++-- dnsping.py | 10 +++++----- dnstraceroute.py | 14 +++++++------- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/dnseval.py b/dnseval.py index 1321240..3e861fa 100755 --- a/dnseval.py +++ b/dnseval.py @@ -136,10 +136,10 @@ def dnsping(host, server, dnsrecord, timeout, count, use_tcp=False, use_edns=Fal if shutdown: # user pressed CTRL+C break try: - stime = time.time() + stime = time.perf_counter() answers = resolver.query(host, dnsrecord, tcp=use_tcp, raise_on_no_answer=False) # todo: response validation in future - etime = time.time() + etime = time.perf_counter() except (dns.resolver.NoNameservers, dns.resolver.NoAnswer): break except dns.resolver.Timeout: diff --git a/dnsping.py b/dnsping.py index 12fc37a..ed9198f 100755 --- a/dnsping.py +++ b/dnsping.py @@ -178,10 +178,10 @@ def main(): if shutdown: break try: - stime = time.time() + stime = time.perf_counter() answers = resolver.query(hostname, dnsrecord, source_port=src_port, source=src_ip, tcp=use_tcp, raise_on_no_answer=False) - etime = time.time() + etime = time.perf_counter() except dns.resolver.NoNameservers as e: if not quiet: print("No response to dns request") @@ -207,7 +207,7 @@ def main(): response_time.append(elapsed) if not quiet: print( - "%d bytes from %s: seq=%-3d time=%3.3f ms" % ( + "%d bytes from %s: seq=%-3d time=%.3f ms" % ( len(str(answers.rrset)), dnsserver, i, elapsed)) if verbose: print(answers.rrset) @@ -236,8 +236,8 @@ def main(): r_stddev = 0 print('\n--- %s dnsping statistics ---' % dnsserver) - print('%d requests transmitted, %d responses received, %3.0f%% lost' % (r_sent, r_received, r_lost_percent)) - print('min=%3.3f ms, avg=%3.3f ms, max=%3.3f ms, stddev=%3.3f ms' % (r_min, r_avg, r_max, r_stddev)) + print('%d requests transmitted, %d responses received, %.0f%% lost' % (r_sent, r_received, r_lost_percent)) + print('min=%.3f ms, avg=%.3f ms, max=%.3f ms, stddev=%.3f ms' % (r_min, r_avg, r_max, r_stddev)) if __name__ == '__main__': diff --git a/dnstraceroute.py b/dnstraceroute.py index 3a540cf..13fddba 100755 --- a/dnstraceroute.py +++ b/dnstraceroute.py @@ -91,7 +91,7 @@ shutdown = False def whoisrecord(ip): try: - currenttime = time.time() + currenttime = time.perf_counter() ts = currenttime if ip in whois: asn, ts = whois[ip] @@ -328,26 +328,26 @@ def main(): curr_host = None with concurrent.futures.ThreadPoolExecutor(max_workers=1) as pool: # dispatch dns lookup to another thread - stime = time.time() + stime = time.perf_counter() thr = pool.submit(ping, resolver, hostname, dnsrecord, ttl, use_edns=use_edns) try: # expect ICMP response _, curr_addr = icmp_socket.recvfrom(512) curr_addr = curr_addr[0] except socket.error: - etime = time.time() + etime = time.perf_counter() pass finally: - etime = time.time() + etime = time.perf_counter() icmp_socket.close() reached = thr.result() if reached: curr_addr = dnsserver - stime = time.time() # need to recalculate elapsed time for last hop without waiting for an icmp error reply + stime = time.perf_counter() # need to recalculate elapsed time for last hop without waiting for an icmp error reply ping(resolver, hostname, dnsrecord, ttl, use_edns=use_edns) - etime = time.time() + etime = time.perf_counter() elapsed = abs(etime - stime) * 1000 # convert to milliseconds @@ -387,7 +387,7 @@ def main(): if curr_addr == dnsserver: c = color.G - print("%d\t%s (%s%s%s) %s%d ms" % (ttl, curr_name, c, curr_addr, color.N, as_name, elapsed), flush=True) + print("%d\t%s (%s%s%s) %s%.3f ms" % (ttl, curr_name, c, curr_addr, color.N, as_name, elapsed), flush=True) trace_path.append(curr_addr) else: print("%d\t *" % ttl, flush=True)