Igo*_*bin 15
是的,有ipaddr模块,您可以帮助检查字符串是否是IPv4/IPv6地址,并检测其版本.
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]
Run Code Online (Sandbox Code Playgroud)
但这不是标准模块,因此并不总是可以使用它.您还尝试使用标准socket模块:
import socket
try:
socket.inet_aton(addr)
print "ipv4 address"
except socket.error:
print "not ipv4 address"
Run Code Online (Sandbox Code Playgroud)
对于IPv6地址,您必须使用socket.inet_pton(socket.AF_INET6, address).
我还想注意,那inet_aton将尝试转换(并真正转换它)地址,如10,127等等,看起来不像IP地址.
对于IPv4,您可以使用
socket.inet_aton(some_string)
Run Code Online (Sandbox Code Playgroud)
如果它抛出异常,some_string则不是有效的IP地址
对于IPv6,您可以使用:
socket.inet_pton(socket.AF_INET6, some_string)
Run Code Online (Sandbox Code Playgroud)
同样,如果some_string不是有效地址,它会抛出异常.
IPv4 + IPv6 解决方案仅依赖于标准库。返回4or6或 raise ValueError。
try:
# Python 3.3+
import ipaddress
def ip_kind(addr):
return ipaddress.ip_address(addr).version
except ImportError:
# Fallback
import socket
def ip_kind(addr):
try:
socket.inet_aton(addr)
return 4
except socket.error: pass
try:
socket.inet_pton(socket.AF_INET6, addr)
return 6
except socket.error: pass
raise ValueError(addr)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
22843 次 |
| 最近记录: |