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

# Source Code for Module dns.ipv4

     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  """IPv4 helper functions."""
    17
    18  import struct
    19
    20  import dns.exception
    21
    22 -def inet_ntoa(address):
    23      """Convert an IPv4 address in network form to text form.
    24
    25      @param address: The IPv4 address
    26      @type address: string
    27      @returns: string
    28      """
    29      if len(address) != 4:
    30          raise dns.exception.SyntaxError
    31      return '%u.%u.%u.%u' % (ord(address[0]), ord(address[1]),
    32                              ord(address[2]), ord(address[3]))
    33
    34 -def inet_aton(text):
    35      """Convert an IPv4 address in text form to network form.
    36
    37      @param text: The IPv4 address
    38      @type text: string
    39      @returns: string
    40      """
    41      parts = text.split('.')
    42      if len(parts) != 4:
    43          raise dns.exception.SyntaxError
    44      for part in parts:
    45          if not part.isdigit():
    46              raise dns.exception.SyntaxError
    47          if len(part) > 1 and part[0] == '0':
    48              # No leading zeros
    49              raise dns.exception.SyntaxError
    50      try:
    51          bytes = [int(part) for part in parts]
    52          return struct.pack('BBBB', *bytes)
    53      except:
    54          raise dns.exception.SyntaxError
    55