blob: 4a332b190bc4ac8a4cccb991fab6f4f81904517a (
plain)
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
|
import dns.resolver
import socket
class Py3status:
"""
This module launch a simple query on each nameservers for the specified domain.
Nameservers are dynamically retrieved. The FQDN is the only one mandatory parameter.
It's also possible to add additional nameservers by appending them in nameservers list.
The default resolver can be overwritten with my_resolver.nameservers parameter.
Written and contributed by @nawadanp
"""
def __init__(self):
self.domain = 'google.com'
self.lifetime = 0.3
self.resolver = []
self.nameservers = []
def ns_checker(self, i3status_output_json, i3status_config):
response = {'full_text': '', 'name': 'ns_checker'}
position = 0
counter = 0
error = False
nameservers = []
my_resolver = dns.resolver.Resolver()
my_resolver.lifetime = self.lifetime
if self.resolver:
my_resolver.nameservers = self.resolver
my_ns = my_resolver.query(self.domain, 'NS')
# Insert each NS ip address in nameservers
for ns in my_ns:
nameservers.append(str(socket.gethostbyname(str(ns))))
for ns in self.nameservers:
nameservers.append(str(ns))
# Perform a simple DNS query, for each NS servers
for ns in nameservers:
my_resolver.nameservers = [ns]
counter += 1
try:
my_resolver.query(self.domain, 'A')
except:
error = True
if error:
response['full_text'] = str(counter) + ' NS NOK'
response['color'] = i3status_config['color_bad']
else:
response['full_text'] = str(counter) + ' NS OK'
response['color'] = i3status_config['color_good']
return (position, response)
|