8

文字列を ipv4 または ipv6 アドレスとして解析する既存のライブラリはありますか、または少なくとも文字列が (いずれかの) IP アドレスであるかどうかを識別しますか?

4

8 に答える 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アドレスを変換しようとする (そして実際に変換しようとする) ことに注意してください。10127

于 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

試す

apt-get install python-ipaddr

またはここからソースコードを入手して ください

于 2013-05-30T20:22:53.443 に答える
1

アドレスが有効であることが確実にわかっていて、それが ipv4 か ipv6 かだけを判断しようとしている場合は、次のようにするだけで十分ではありません。

if ":" in address:
    print("Ipv6")
else:
    print("Ipv4")
于 2016-08-19T12:45:19.743 に答える
1

ipaddr -- Google の IP アドレス操作パッケージ。

パッケージの改訂版を Python 標準ライブラリに含めるという提案が最近受け入れられたことに注意してください ( PEP 3144を参照)。

于 2012-08-06T12:09:19.670 に答える