이웃의 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도 뒤집어야 합니다.

이 스크립트는 앞에 오는 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.

그러나 실제로 실제 이웃 목록( arpIPv4와 유사)을 얻으려는 경우 더 쉬운 방법이 있습니다. 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

관련 정보