Shell- ipv6地址的格式转化
前言:遇到了一個需求——抓出ipv6地址所對應的網卡名。
????? 分析:ip a與ifconfig顯示的結果中沒有網卡和ipv6地址的對應關系,所以想到去內存中匹配,但是內存中的ipv6地址與ip a看到的地址格式不同,因此需要做轉化。即將2003:a:12:bcd:a3b4::200轉化成2003000a00120bcda3b4000000000200,然后根據轉化的結果在/proc/net/if_inet6中匹配出對應的網卡名。
#!/bin/bash
num=`(echo $addr6 | grep -o ":" | wc -l)`
echo $addr6 > /root/ipv6.tem
? while [ $num -lt 6 ]
? do
??? sed -i "s/::/:0000::/g" /root/ipv6.tem
??? let num++
? done
? if [ $num -eq 6 ]
? then
??? sed -i "s/::/:0000:0000:/g" /root/ipv6.tem
? fi
ip6str=`cat /root/ipv6.tem`
b=${ip6str//:/ }
rm -rf /root/ipv6.tem
arr=($b)
i=0
while [[ i -lt ${#arr[@]} ]]; do
? arr[i]=`(echo ${arr[i]}|awk '{print strtonum("0x"$0)}'|awk '{printf("%04x\n",$0)}')`
? let i++
done
ipv6=$(echo ${arr[@]}|sed 's/ //g')
interface=`(grep $ipv6 /proc/net/if_inet6 | awk '{print $NF}')`
后記:最近發現這段代碼能否正常運行和shell版本有關,不同的shell還需進一步調整!
總結
以上是生活随笔為你收集整理的Shell- ipv6地址的格式转化的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 非科班本科普通人转码攻略
- 下一篇: 什么叫资源整合?