文字列を ipv4 または ipv6 アドレスとして解析する既存のライブラリはありますか、または少なくとも文字列が (いずれかの) IP アドレスであるかどうかを識別しますか?
25823 次
8 に答える
17
はい、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]
ただし、これは標準モジュールではないため、常に使用できるとは限りません。また、標準socket
モジュールを使用してみてください。
import socket
try:
socket.inet_aton(addr)
print "ipv4 address"
except socket.error:
print "not ipv4 address"
IPv6 アドレスの場合は、socket.inet_pton(socket.AF_INET6, address)
.
また、IP アドレスのように見えない などのinet_aton
アドレスを変換しようとする (そして実際に変換しようとする) ことに注意してください。10
127
于 2012-08-06T12:09:46.383 に答える
9
IPv4の場合、使用できます
socket.inet_aton(some_string)
例外がスローされる場合some_string
は、有効な IP アドレスではありません
IPv6 の場合、以下を使用できます。
socket.inet_pton(socket.AF_INET6, some_string)
some_string
が有効なアドレスでない場合は、ここでも例外がスローされます。
于 2012-08-06T12:10:45.980 に答える
3
図書館を利用できますnetaddr
。valid_ipv4/valid_ipv6 メソッドがあります。
import netaddr
if netaddr.valid_ipv4(str_ip) is True:
print("IP is IPv4")
else:
if netaddr.valid_ipv6(str_ip) is True:
print("IP is IPv6")
于 2016-09-25T14:19:11.877 に答える
2
于 2013-05-30T20:22:53.443 に答える
1
アドレスが有効であることが確実にわかっていて、それが ipv4 か ipv6 かだけを判断しようとしている場合は、次のようにするだけで十分ではありません。
if ":" in address:
print("Ipv6")
else:
print("Ipv4")
于 2016-08-19T12:45:19.743 に答える