ネイバーの MAC アドレスに適した ipv6 アドレスの検索

ネイバーの MAC アドレスに適した ipv6 アドレスの検索

出力で見つけることができるMACアドレス変換のための可能なIP6アドレスのリストがあります。

ping6 ff02::1%wlan0

可能なMACアドレスは次のとおりです。

66:70:02:75:80:fe, 64:70:02:74:80:fe, 66:70:02:74:80:ff

それぞれは、次から始まり、fe80::途中FF:FEに挿入されるリンクローカルIP6アドレスを生成します。

だから66:70:02:75:80:feそれは次のようにつながるでしょうfe80::6670:2ff:fe75:80fe

MACアドレスリストに一致するLinkLocalアドレスを提供するスクリプトを作成したいと思います。たとえば、次のようになります。

$ find-in-macs 66:70:02:75:80:fe 64:70:02:74:80:fe 66:70:02:74:80:ff

そして出力:

matching IP6: fe80::6670:2ff:fe75:80fe

スクリプトはfind-in-macs次のとおりです。

#!/bin/bash
mac_to_ipv6 () {
  IFS=':'; set $1; unset IFS
  ipv6_address="fe80::$(printf %02x $((0x$1 ^ 2)))$2:${3}ff:fe$4:$5$6"
  echo $ipv6_address
}


for i do
    echo checking $i
    ping6 ff02::1%wlan0|grep mac_to_ipv6 $i
done

答え1

まず、MACを分割してff:feを挿入するだけでなく、汎用/ローカルアドレスを正しく表すためにビット7も反転する必要があります。

このスクリプトは、前のゼロを減らすことを含む、イーサネットアドレスに基づいてリンクローカルIPv6アドレスの形式を正しく指定します。

#!/bin/bash

IFS=':'; set $1; unset IFS
printf "fe80::%x:%x:%x:%x\n" $(( 0x${1}${2} ^ 0x200 )) 0x${3}ff 0xfe${4} 0x${5}${6}

ビット反転とゼロ化の例:

$ ether_to_ipv6 00:00:00:00:00:00
fe80::200:ff:fe00:0
$ ether_to_ipv6 11:11:11:11:11:11
fe80::1311:11ff:fe11:1111

また、技術的にリンクがこのアルゴリズムと一致するアドレスを持つという保証はないことに注意してください。衝突が発生した場合(悪意があるかどうかにかかわらず)、一方または両方の当事者が新しい住所を選択する必要があります。実装はさまざまです。実際に処理したのでYMMV。

ただし、実際の近隣リスト(arpIPv4に似ている)を取得したい場合は、より簡単な方法があります。 Neighbor Discovery Protocol(ndp)を使用します。

Linux:

ip -6 neigh show

ソラリス:

netstat -pf inet6

Mac OS X、AIX、* BSD:

ndp -a

JunOS、IOS、Vyatta:

show ipv6 neighbors

これらの各コマンドは、デフォルトのndpを使用して、すべてのライブIPv6ネイバーのリストを表示します。

答え2

あなたのヒントを通してスクリプトを完成させることができます。

#!/bin/bash

mac_to_ipv6 () {
  IFS=':'; set $1; unset IFS
  ipv6_address="fe80::$(printf %02x $((0x$1 ^ 2)))$2:${3}ff:fe$4:$5$6"
  echo $ipv6_address
}
echo "Next MAC with ^C"
for i do
  echo
  echo checking for  $i = $(mac_to_ipv6 $i)
  echo 
  ping6 ff02::1%wlan0 | head -n 1000 | grep $(mac_to_ipv6 $i)
done

望むより:http://freifunk.in-kiel.de/wiki/Firmware#IPv6_Adresse_des_Routers

関連情報