bashを使用してMACアドレスをリンクローカルアドレスに変換する

bashを使用してMACアドレスをリンクローカルアドレスに変換する

Macアドレスをipv6リンクローカルアドレスに変換するには?

fe80::最初に追加してff:fe中間に挿入する必要があります。

また、すべての先行ゼロを削除する必要があります。

ベストアンサー1

IFSMACアドレスをコロンで区切られた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}"
}

おすすめ記事