检查IP地址(Checking for IP addresses)

2019-06-26 19:29发布

是否有任何现有的库来解析字符串作为IPv4或IPv6地址,或者至少确定一个字符串是否是(任排序)的IP地址?

Answer 1:

是的,有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)

我也想指出,这inet_aton将尝试转换(真正将其转换)地址像10127等等,这看起来不像IP地址。



Answer 2:

对于IPv4,您可以使用

socket.inet_aton(some_string)

如果它抛出一个异常, some_string是不是一个有效的IP地址

对于IPv6,您可以使用:

socket.inet_pton(socket.AF_INET6, some_string)

再次,它抛出一个异常,如果some_string是不是一个有效的地址。



Answer 3:

的IPv4 + IPv6解决方案仅仅依靠标准库。 返回46或引发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)


Answer 4:

您可以使用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")


Answer 5:

IPADDR -谷歌的IP地址操纵包。

需要注意的是一个提案,包括包中的Python标准库最近被接受(见的修订版PEP 3144 )。



Answer 6:

尝试

apt-get install python-ipaddr

或者从源代码在这里



Answer 7:

如果你肯定知道该地址是有效的,只是想确定它是否是IPv4或IPv6,是不是足以只是做:

if ":" in address:
    print("Ipv6")
else:
    print("Ipv4")


Answer 8:

我喜欢ip_interface因为它处理的情况下既没有前缀的面膜,例如,既有“10.1.1.1/24”,以及简单的“10.1.1.1”。 不用说,既适用于V4和V6

from ipaddress import ip_interface
ip_interface("10.1.1.1/24").ip
ip_interface("10.1.1.1/24").ip.version
ip_interface("10.1.1.1").ip
ip_interface("10.1.1.1").ip.version


文章来源: Checking for IP addresses
标签: python ip ipv6