如何在python中比较IPV6地址

2024-05-08 13:22:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用的是python——2.6版和solaris10作为操作系统

这些是一些有效的IPV6地址。我的Ip地址是字符串。在

  • 2001年:川东北:0000:0000:0000:0000:3257:9652
  • 2001年:cdba:0:0:0:0:3257:9652
  • 2001年:川东北:3257:9652

是否所有的ip都表示为ip地址。我做了很多搜索,找到了一些在python3中可用的类,比如ipaddress,但是我不能像使用python2.6那样使用它版本。是Python2.6中有可用的类吗?在

谢谢


Tags: 字符串版本ip地址python3ipv6ipaddresssolaris10
3条回答

您可以使用regex.sub

st_arr = ['2001:cdba:0000:0000:0000:0000:3257:9652', '2001:cdba:0:0:0:0:3257:9652', '2001:cdba::3257:9652']

new_string_arr = [re.sub(r'[:]+', ':', re.sub(':[0]+', ':', st))) for st in st_arr]

new_string_arr
Out[63]: ['2001:cdba:3257:9652', '2001:cdba:3257:9652', '2001:cdba:3257:9652']

new_string_arr[0] == new_string_arr[1] == new_string_arr[2]
Out[64]: True

首先regex将模式:[0]+替换为:,之后由于可能有多个冒号,我将模式[:]+替换为:。在

你可以用插座。在

import socket
ip1 = "2001:cdba:0000:0000:0000:0000:3257:9652"
ip2 = "2001:cdba::3257:9652"
if socket.inet_pton(socket.AF_INET6, ip1) == socket.inet_pton(socket.AF_INET6, ip2):
     print "match"

在比较IP地址之前,可以使用套接字库检查它们是否为有效的ipv6格式:

import socket

def is_valid_ipv6_address(address):
try:
    socket.inet_pton(socket.AF_INET6, address)
except socket.error:  # not a valid address
    return False
return True

验证后,现在可以使用正则表达式比较它们是否相等迭代所有ipv6地址

^{pr2}$

这对aaaa:bbbb:中交:dddd:伊芙:伊芙:1111::和aaaa:bbbb:中交:dddd:eeee:ffff公司:1111:0格式。在

相关问题 更多 >