Package dns :: Module inet
[hide private]
[frames] | no frames]

Source Code for Module dns.inet

  1  # Copyright (C) 2003-2007, 2009-2011 Nominum, Inc. 
  2  # 
  3  # Permission to use, copy, modify, and distribute this software and its 
  4  # documentation for any purpose with or without fee is hereby granted, 
  5  # provided that the above copyright notice and this permission notice 
  6  # appear in all copies. 
  7  # 
  8  # THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES 
  9  # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 
 10  # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR 
 11  # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 
 12  # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 
 13  # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT 
 14  # OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 
 15   
 16  """Generic Internet address helper functions.""" 
 17   
 18  import socket 
 19   
 20  import dns.ipv4 
 21  import dns.ipv6 
 22   
 23   
 24  # We assume that AF_INET is always defined. 
 25   
 26  AF_INET = socket.AF_INET 
 27   
 28  # AF_INET6 might not be defined in the socket module, but we need it. 
 29  # We'll try to use the socket module's value, and if it doesn't work, 
 30  # we'll use our own value. 
 31   
 32  try: 
 33      AF_INET6 = socket.AF_INET6 
 34  except AttributeError: 
 35      AF_INET6 = 9999 
 36   
 37   
38 -def inet_pton(family, text):
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
58 -def inet_ntop(family, address):
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
77 -def af_for_address(text):
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: 89 try: 90 dns.ipv6.inet_aton(text) 91 return AF_INET6 92 except: 93 raise ValueError
94 95
96 -def is_multicast(text):
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: 107 try: 108 first = ord(dns.ipv6.inet_aton(text)[0]) 109 return (first == 255) 110 except: 111 raise ValueError
112