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.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…