python 以及 shell下 ipv6地址转换
转载
目录
- ipv6 地址格式
- linux输出的ipv6地址格式
- python下实现ipv6地址转换
- shell 下实现ipv6 地址转换
- 参考
ipv6 地址格式
ipv6 地址格式存在多种多样。
易读模式:
易读模式下,不存在不0,小写,多个连续的0变为::
标准模式:
标准模式下存在补0,以及大写。
linux输出的ipv6地址格式
如上,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