
出力で見つけることができる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。
ただし、実際の近隣リスト(arp
IPv4に似ている)を取得したい場合は、より簡単な方法があります。 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