目录

  • ​​ipv6 地址格式​​
  • ​​linux输出的ipv6地址格式​​
  • ​​python下实现ipv6地址转换​​
  • ​​方法一​​
  • ​​方法2​​
  • ​​shell 下实现ipv6 地址转换​​
  • ​​参考​​

ipv6 地址格式

ipv6 地址格式存在多种多样。

python 以及 shell下 ipv6地址转换_ipv6

易读模式:
易读模式下,不存在不0,小写,多个连续的0变为::

标准模式:
标准模式下存在补0,以及大写。

linux输出的ipv6地址格式

python 以及 shell下 ipv6地址转换_ipad_02


如上,linux输出的格式为易读模式。

python下实现ipv6地址转换

python自带的官方库和某些第三方库都可以实现 ip 字符串和网络字节序之间的相互转换,同时也可以达到 ipv6 格式的转换。
比如:都转换为易读模式。

方法一

安装:
pip install IPy

代码:

def import_or_install_pkg(package):
try:
__import__(package)
except ImportError:
pip.main(['install', package])

一般是默认带有 IPy 包的。
--------------

import IPy
ip4 = '102.103.104.105'
net4 = 1718052969
ip6 = '2001:0db8:3c4d:0015:0000:0000:1a2f:1a2b'
net6 = 42540766429944781121676641069932943915

IPy.IP(ip4).int() # 1718052969
IPy.IP(ip6).int() # 42540766429944781121676641069932943915

IPy.IP(net4).strCompressed() # '102.103.104.105'
IPy.IP(net6).strCompressed() # '2001:db8:3c4d:15::1a2f:1a2b'

方法2

import ipaddress

ip4 = '102.103.104.105'
net4 = 1718052969
ip6 = '2001:0db8:3c4d:0015:0000:0000:1a2f:1a2b'
net6 = 42540766429944781121676641069932943915

int(ipaddress.ip_address(ip4)) # 1718052969
int(ipaddress.ip_address(ip6)) # 42540766429944781121676641069932943915
str(ipaddress.ip_address(net4)) # '102.103.104.105'
str(ipaddress.ip_address(net6)) # '2001:db8:3c4d:15::1a2f:1a2b'

shell 下实现ipv6 地址转换

check_pkg_installed() {
if ! command -v ipv6calc; then
yum install -y ipv6calc
fi
}

#ip6='2001:0BD8:3C4D:0015:0000:0000:1A2F:1A2B'
#ipv6calc --addr2compaddr -q ${ip6}; echo $?
输出:
2001:bd8:3c4d:15::1a2f:1a2b
0

参考

ipv6 addr format:
https://www.ibm.com/docs/en/i/7.2?topic=concepts-ipv6-address-types