Macアドレスをipv6リンクローカルアドレスに変換するには?
fe80::
最初に追加してff:fe
中間に挿入する必要があります。
また、すべての先行ゼロを削除する必要があります。
ベストアンサー1
IFS
MACアドレスをコロンで区切られた6つのグループに分割して組み合わせることができます。また、7番目に重要なビットを反転する必要があります(ありがとう。バハマ)、これは最初のバイトのビット1です。
mac_to_ipv6 () {
IFS=':'; set $1; unset IFS
ipv6_address="fe80::$(printf %02x $((0x$1 ^ 2)))$2:${3}ff:fe$4:$5$6"
}
プレフィックスとサフィックスを使用して構造を削除できます。${VAR#PREFIX}
そして${VAR%SUFFIX}
MACアドレスを複数の部分に切り捨てます。
mac_to_ipv6 () {
mac=$1
ipv6_address=fe80::$(printf %02x $((0x${mac%%:*} ^ 2)))
mac=${mac#*:}
ipv6_address=$ipv6_address${mac%:*:*:*}ff:fe
mac=${mac#*:*:}
ipv6_address=$ipv6_address${mac%:*}${mac##*:}
}
サブストリング構成を使用できます(shではなくbashのみ)。
mac_to_ipv6 () {
local mac=$1 byte0
printf %02x -v byte0 $((0x${mac:0:2} ^ 2))
ipv6_address="fe80::$byte0${mac:3:5}ff:fe${mac:9:5}${mac:15:2}"
}