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的博客排序

相關文章
相關標籤/搜索