출력에서 찾을 수 있는 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도 뒤집어야 합니다.
이 스크립트는 앞에 오는 0을 줄이는 것을 포함하여 이더넷 주소를 기반으로 링크 로컬 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)을 사용합니다.
리눅스:
ip -6 neigh show
솔라리스:
netstat -pf inet6
맥 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