Linux下获取无压缩完整格式IPv6地址的方法咨询
Linux下获取无压缩完整格式IPv6地址的方法咨询
嗨,刚好碰到过类似的需求,来给你支几招!
首先得说,ip address show eth0这个命令本身没有直接的参数能输出无压缩的完整IPv6格式,默认就是带::的压缩版,所以我们得靠管道搭配其他工具来转格式。
方法一:纯系统自带工具搞定(不用装新软件)
用CentOS默认就有的ip、grep、awk、sed这些工具串起来就行,命令如下:
ip -6 address show eth0 | grep inet6 | awk '{print $2}' | cut -d'/' -f1 | sed -e 's/::/:0000:0000:0000:0000:0000:0000:0000:0000/g' -e 's/\([0-9a-fA-F]\{1,3\}\)/000\1/g' -e 's/0*\([0-9a-fA-F]\{4\}\)/\1/g' -e 's/:0000\(:0000\)*:/:/g'
简单说下这个命令链的步骤:
- 先只抓eth0的IPv6相关信息,过滤出带inet6的行
- 提取出带前缀的IP部分,再把后面的
/64前缀长度切掉 - 最后用sed把
::替换成连续的0000段,再把每一段补全到4位数字,整理成你要的完整格式
方法二:用专门的IPv6工具(更靠谱,需额外安装)
如果经常要处理IPv6,推荐装个inet6calc,这是专门处理IPv6地址的工具,逻辑更稳:
先装包:
yum install -y inet6calc
然后用这个命令转换:
ip -6 address show eth0 | grep inet6 | awk '{print $2}' | cut -d'/' -f1 | inet6calc --show-fulluncompressed
这个工具会自动帮你处理所有压缩情况,比自己写sed脚本省心多了。
方法三:用Python单行命令(逻辑最清晰)
如果你的机器上有Python(CentOS一般默认带Python2或3),用这个方法最不容易出错,因为Python的ipaddress模块是官方维护的,处理IPv6格式很靠谱:
ip -6 address show eth0 | grep inet6 | awk '{print $2}' | cut -d'/' -f1 | python -c "import sys, ipaddress; print(ipaddress.IPv6Address(sys.stdin.read().strip()).exploded)"
把压缩后的IP传给Python,它直接给你输出完整无压缩的格式,逻辑一目了然。
你可以根据自己的情况选其中一种,测试一下应该就能得到你要的那种不带任何压缩的完整IPv6地址啦!
备注:内容来源于stack exchange,提问作者Samul
相关产品推荐
相关产品推荐

