1 """DNS-related utilities."""
2
3 from socket import inet_aton, inet_ntoa
4
6 s=inet_aton(ip)
7 octets=map(None, s)
8 n=0L
9 for o in octets:
10 n=n<<8
11 n+=ord(o)
12 return n
13
15 n=0L
16 while num>0:
17 n>>=1
18 n |= 2**31
19 num-=1
20 return n
21
29
31 s=(
32 chr((n>>24)&0xFF)
33 + chr((n>>16)&0xFF)
34 + chr((n>>8)&0xFF)
35 + chr(n&0xFF)
36 )
37 ip=inet_ntoa(s)
38 return ip
39
41 bits = aton(netmask)
42 i = 2**31
43 n = 0
44 while bits and i > 0:
45 if (bits & i) == 0:
46 if bits:
47 raise RuntimeError, "Invalid netmask: %s" % netmask
48 n += 1
49 bits -= i
50 i = i >> 1
51 return n
52
54 """
55 Convert an IP address and netmask to a CIDR delegation
56 -style zone name.
57 """
58 net = aton(ip) & aton(netmask)
59
60 nmBits = netmaskToNumbits(netmask)
61 bytes, bits = divmod(nmBits, 8)
62 octets = ntoa(net).split('.')
63 octets.reverse()
64 if not bits:
65 octets = octets[-bytes:]
66 else:
67 partial = octets[-bytes-1]
68 octets = octets[-bytes:]
69 octets.insert(0, '%s/%d' % (partial, nmBits))
70
71 return '.'.join(octets)+'.in-addr.arpa.'
72