-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdns_test.py
111 lines (95 loc) · 2.91 KB
/
dns_test.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
import random
import string
import sys
import multiprocessing as mp
from time import sleep
from collections import Counter
from dns import *
def domain_test(dns_server, domain):
rsvr = resolver.Resolver()
rsvr.nameservers = [dns_server]
try:
ans = rsvr.resolve(domain)
except Exception as e:
res = (domain, type(e).__name__, [])
else:
ip_list = []
for rdata in ans:
ip_list.append(rdata.to_text())
res = (domain, 'OK', ip_list)
return res
def get_random_domain_list(n):
l = [''.join(random.choices(string.ascii_lowercase, k=5)) + '.com'
for _ in range(n)]
return l
def print_counter(counter):
l = list(counter.items())
l.sort()
for k, v in l:
print(f'\t{k}: {v}')
if __name__ == '__main__':
random.seed(42)
LOCALHOST = '127.0.0.1'
LOCAL_DNS = '192.168.2.1'
a = sys.argv[1]
if a == 'l':
srv = LOCALHOST
elif a == 'd':
srv = LOCAL_DNS
else:
srv = a
print('Testing DNS server:', srv)
print()
print('----------Basic Test----------')
n = 10
l = list(map(domain_test, [srv]*n, get_random_domain_list(n)))
print(*l, sep='\n')
st_l = [x[1] for x in l]
print('SUMMARY:', f'TOTAL {n}')
print_counter(Counter(st_l))
print('------------------------------')
print()
sleep(10)
with mp.Pool(processes=100) as pool:
print('----------50x Test----------')
n = 50
l = pool.starmap(domain_test, zip([srv]*n, get_random_domain_list(n)))
print(*l, sep='\n')
st_l = [x[1] for x in l]
print('SUMMARY:', f'TOTAL {n}')
print_counter(Counter(st_l))
print('------------------------------')
print()
sleep(10)
print('----------200x Test----------')
n = 200
l = pool.starmap(domain_test, zip([srv]*n, get_random_domain_list(n)))
# print(*l, sep='\n')
st_l = [x[1] for x in l]
print('SUMMARY:', f'TOTAL {n}')
print_counter(Counter(st_l))
print('------------------------------')
print()
sleep(10)
print('----------500x Test----------')
n = 500
l = pool.starmap(domain_test, zip([srv]*n, get_random_domain_list(n)))
# print(*l, sep='\n')
st_l = [x[1] for x in l]
print('SUMMARY:', f'TOTAL {n}')
print_counter(Counter(st_l))
print('------------------------------')
print()
sleep(10)
print('----------1000x Test, sleep 1s per 50x----------')
n = 50
for i in range(20):
l += pool.starmap(domain_test,
zip([srv]*n, get_random_domain_list(n)))
sleep(1)
# print(*l, sep='\n')
st_l = [x[1] for x in l]
print('SUMMARY:', f'TOTAL {n*20}')
print_counter(Counter(st_l))
print('------------------------------')
print()