Linux中获取本机的最新IPv6地址_的脚本

Linux中获取本机的最新IPv6地址_的脚本

转载注明来源: 本文连接 来自osnosn的博客,写于 2019-11-07.html

运营商提供ipv6地址。
路由器后有台linux机器,经过eui64方式自动配置ipv6地址。
可是,运营商会定时强制路由器重拨,致使ipv6的前缀(prefix)变化。
虽然linux会立刻自动配置新的ipv6地址。但旧的ipv6地址不会立刻消失。
旧ipv6须要等超时expired后才删除,有时要等2000多秒(30多分钟)。
这段时间主机会有两个ipv6地址。若是不能正确找出新的ipv6地址去更新ddns,则这段时间没法访问主机。linux

经过查看 ip addr show 发现每一个ip后面一行给出了expired时间。
新ip的expired时间老是比旧ip大。这样就能够找出最新的ipv6地址了。shell

如下是shell脚本,会显示出最新的ipv6地址。ui

ip addr show|grep -A1 'inet6 [^f:]'|sed -nr ':a;N;s#^ +inet6 ([a-f0-9:]+)/.+? scope global .*? valid_lft ([0-9]+sec) .*#\2 \1#p;ta'|grep 'ff:fe'|sort -nr|head -n1|cut -d' ' -f2

脚本执行步骤是,code

  • ip addr show
  • 挑出inet6地址,并同时显示下一行
  • 把expired时间和ipv6地址,经过正则找出来,并显示在同一行。超时时间在前,ip在后。
  • 过滤出eui64地址
  • 根据时间的长短,反向排序
  • 输出第一行
  • 输出第二列(ip)

若是要把这个地址保存到变量,用来更新ddns。htm

ipv6=$(ip addr show|grep -A1 'inet6 [^f:]'|sed -nr ':a;N;s#^ +inet6 ([a-f0-9:]+)/.+? scope global .*? valid_lft ([0-9]+sec) .*#\2 \1#p;ta'|grep 'ff:fe'|sort -nr|head -n1|cut -d' ' -f2)
echo "my ipv6 is:" $ipv6

---end---blog

转载注明来源: 本文连接 来自osnosn的博客排序

相关文章
相关标签/搜索