是否有命令打印出::
接口的长 IPv6 版本(即全零而不是带有 的短版本)?
例如,ip -6 addr -I eth0 full
答案1
就像是
grep eth0 /proc/net/if_inet6 | cut -d' ' -f1
将为您提供十六进制的完整地址。:
如果需要的话,您仍然需要插入分隔符。 (你没说为什么你需要全零 - 任何需要的东西:
也将接受带有::
) 的简短形式。
编辑
对于 DNS PTR 的前缀,类似于
grep eth0 /proc/net/if_inet6 | cut -d' ' -f1 | rev | sed 's/./&./g'
注意它会返回全部该接口的 IPv6 地址,因此您需要迭代。
另外,如果您需要在接口上的现有 IPv6 中设置 DNS PTR 条目,则您处理 DNS 的方式很可能是非常错误的。通常您会以相反的方式进行操作:无论您的 DNS 条目的来源是什么,它也应该确定您接口上的地址。
答案2
对于生成反向 DNS 记录,也许sipcalc
是一个更好的工具:
$ sipcalc -r 2001:db8::1
-[ipv6 : 2001:db8::1] - 0
[IPV6 DNS]
Reverse DNS (ip6.arpa) -
1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa.
只需用于grep
获取记录名称本身:
$ sipcalc -r 2001:db8::1 | fgrep .ip6.arpa
1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa.