MAC 주소를 사용하여 인터페이스 식별자 (예 : 네트워크에서 고유해야하는 링크 로컬 IPv6 주소)를 만들 수 있습니다.
이미지는이를 수행하는 방법을 보여줍니다.
내 질문은 :
- 어떻게 사용하여 MAC에서 IPv6 주소를 생성 할 수 있습니다
awk
또는sed
? - 또는 특정 MAC에 대한 링크 로컬 IPv6 주소를 제공하는 명령이
createIPv6 myMAC
있습니까?
MAC 주소를 사용하여 인터페이스 식별자 (예 : 네트워크에서 고유해야하는 링크 로컬 IPv6 주소)를 만들 수 있습니다.
이미지는이를 수행하는 방법을 보여줍니다.
내 질문은 :
awk
또는 sed
?createIPv6 myMAC
있습니까?답변:
MAC (및 주어진 접두사)에서 전체 IPv6 주소를 만들려면 ipv6calc
Peter Bieringer 의 훌륭한 도구를 사용할 수 있습니다 .
다음 명령은 fe80::
MAC 주소에서 링크 로컬 IPv6 주소 ( 접두사)를 만듭니다 .
$ ipv6calc --action prefixmac2ipv6 --in prefix+mac --out ipv6addr fe80:: 00:21:5b:f7:25:1b
fe80::221:5bff:fef7:251b
대부분의 옵션을 그대로두고 명령이 수행 할 작업을 추측하게 할 수 있습니다.
$ ipv6calc --in prefix+mac fe80:: 00:21:5b:f7:25:1b
No action type specified, try autodetection...found type: prefixmac2ipv6
fe80::221:5bff:fef7:251b
데비안 배포판의 ipv6calc
경우 기본 저장소에 있습니다.
로부터 의 IPv6 위키 백과의 항목 더 텍스트 설명 :
64 비트 인터페이스 식별자는 48 비트 MAC 주소에서 가장 일반적으로 파생됩니다.
MAC 주소 00 : 0C : 29 : 0C : 47 : D5는 중간에 00 : 0C : 29 : FF : FE : 0C : 47 : D5에 FF : FE를 삽입하여 64 비트 EUI-64로 바뀝니다.
따라서 세 번째 :
로 바꾸면 :FF:FE:
트릭을 수행해야합니다.
echo 00:0C:29:0C:47:D5 | sed s/:/:FF:FE:/3
00:0C:29:FF:FE:0C:47:D5
이 구문이 GNU sed에만 해당되는지 전혀 알 수 없습니다.
진행중인 작업:
이것을 비트로 변환하십시오.
for HEX in $(tr ":" " " <<< 00:0C:29:FF:FE:0C:47:D5)
do
printf "%08d " $(bc <<< "ibase=16;obase=2;$HEX")
done
00000000 00001100 00101001 11111111 11111110 00001100 01000111 11010101
비트 번호 7의 뒤집기 만 비트 에서 나옵니다.
당신은 만들 수 있습니다 bash는 기능을 (그리고에 배치 ~/.bashrc
)가 사용하는 것을 IFS
6 콜론으로 구분 된 그룹과 조립을에 MAC 주소를 분리 할 수 있습니다. 또한 7 번째 최상위 비트, 즉 첫 번째 바이트의 비트 1을 뒤집어 야합니다.
mac_to_ipv6_ll() {
IFS=':'; set $1; unset IFS
echo "fe80::$(printf %02x $((0x$1 ^ 2)))$2:${3}ff:fe$4:$5$6"
}
사용 예 :
$ mac_to_ipv6_ll 12:34:56:78:90:12
fe80::1034:56ff:fe78:9012
나는 위의 순수한 쉘 (printf를 세지 않는 한) 위의 @ rubo77에 kudos를 제공해야합니다.
이것은 약간의 sed를 추가합니다 :
(a) 각 16 비트 청크에서 선행 0을 제거합니다. 과
(b) IID가 시작될 때 더 이상 0이 아닌 청크를 제거
... 주소 간결성을위한 일반적인 규칙에 따라.
mac_to_eui64() {
IFS=':'; set $1; unset IFS
echo "fe80::$(printf %x $((0x$1 ^ 2)))$2:${3}ff:fe$4:$5$6" |
sed -E 's/:0+/:/g; s/:{3,}/::/; s/:$/:0/'
}
EUI-64를 모든 범위에서 사용할 수 있기 때문에 (임의의) 접두사에 다른 용도로 사용하려는 경우 개인 정보 보호를 위해 전역 주소로 사용하지 않는 것이 좋습니다) 더 복잡한 sed 스크립트. fe80::
접두사에 이미 IID의 시작 부분에 인접한 3 개의 제로 청크 (더블 콜론 필요)가 포함되어 있기 때문 입니다. 따라서 IID의 첫 번째 청크가 모두 0 인 경우에도 (즉, MAC 02:00
이로 시작된 경우 ) 역시 제거됩니다. EUI-64 형식은 위의 스크립트가 단일 0으로 다시 추가하는 0이 될 수있는 하나의 청크 만 남습니다. 다른 접두사에는 두 개의 콜론 사이에 하나의 0을 남겨 두어야 할 수도 있습니다.
printf
내버려두고 대신 sed로 추가 작업을했습니다.