Improve query time measurement accuracy and display
This commit is contained in:
parent
6a0b0c2ff5
commit
87cea8c04c
@ -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:
|
||||
|
10
dnsping.py
10
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__':
|
||||
|
@ -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)
|
||||
|
Loading…
x
Reference in New Issue
Block a user