Search code examples
pythonipipv6

Checking for IP addresses


Are there any existing libraries to parse a string as an ipv4 or ipv6 address, or at least identify whether a string is an IP address (of either sort)?


Solution

  • Yes, there is ipaddr module, that can you help to check if a string is a IPv4/IPv6 address, and to detect its version.

    import ipaddr
    import sys
    
    try:
       ip = ipaddr.IPAddress(sys.argv[1])
       print '%s is a correct IP%s address.' % (ip, ip.version)
    except ValueError:
       print 'address/netmask is invalid: %s' % sys.argv[1]
    except:
       print 'Usage : %s  ip' % sys.argv[0]
    

    But this is not a standard module, so it is not always possible to use it. You also try using the standard socket module:

    import socket
    
    try:
        socket.inet_aton(addr)
        print "ipv4 address"
    except socket.error:
        print "not ipv4 address"
    

    For IPv6 addresses you must use socket.inet_pton(socket.AF_INET6, address).

    I also want to note, that inet_aton will try to convert (and really convert it) addresses like 10, 127 and so on, which do not look like IP addresses.