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)?
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) print '%s is a correct IP%s address.' % (ip, ip.version) except ValueError: print 'address/netmask is invalid: %s' % sys.argv except: print 'Usage : %s ip' % sys.argv
But this is not a standard module, so it is not always possible to use it.
You also try using the standard
import socket try: socket.inet_aton(addr) print "ipv4 address" except socket.error: print "not ipv4 address"
For IPv6 addresses you must use
I also want to note, that
inet_aton will try to convert (and really convert it) addresses like
127 and so on, which do not look like IP addresses.