1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 """Generic Internet address helper functions."""
17
18 import socket
19
20 import dns.ipv4
21 import dns.ipv6
22
23
24
25
26 AF_INET = socket.AF_INET
27
28
29
30
31
32 try:
33 AF_INET6 = socket.AF_INET6
34 except AttributeError:
35 AF_INET6 = 9999
36
37
39 """Convert the textual form of a network address into its binary form.
40
41 @param family: the address family
42 @type family: int
43 @param text: the textual address
44 @type text: string
45 @raises NotImplementedError: the address family specified is not
46 implemented.
47 @rtype: string
48 """
49
50 if family == AF_INET:
51 return dns.ipv4.inet_aton(text)
52 elif family == AF_INET6:
53 return dns.ipv6.inet_aton(text)
54 else:
55 raise NotImplementedError
56
57
59 """Convert the binary form of a network address into its textual form.
60
61 @param family: the address family
62 @type family: int
63 @param address: the binary address
64 @type address: string
65 @raises NotImplementedError: the address family specified is not
66 implemented.
67 @rtype: string
68 """
69 if family == AF_INET:
70 return dns.ipv4.inet_ntoa(address)
71 elif family == AF_INET6:
72 return dns.ipv6.inet_ntoa(address)
73 else:
74 raise NotImplementedError
75
76
78 """Determine the address family of a textual-form network address.
79
80 @param text: the textual address
81 @type text: string
82 @raises ValueError: the address family cannot be determined from the input.
83 @rtype: int
84 """
85 try:
86 dns.ipv4.inet_aton(text)
87 return AF_INET
88 except Exception:
89 try:
90 dns.ipv6.inet_aton(text)
91 return AF_INET6
92 except:
93 raise ValueError
94
95
97 """Is the textual-form network address a multicast address?
98
99 @param text: the textual address
100 @raises ValueError: the address family cannot be determined from the input.
101 @rtype: bool
102 """
103 try:
104 first = ord(dns.ipv4.inet_aton(text)[0])
105 return first >= 224 and first <= 239
106 except Exception:
107 try:
108 first = ord(dns.ipv6.inet_aton(text)[0])
109 return first == 255
110 except Exception:
111 raise ValueError
112