Linux 명령 줄에서 임의의 MAC 주소를 어떻게 생성합니까?
Linux 명령 줄에서 일반적으로 사용되는 표준 도구 만 필요한 솔루션을 검색합니다.
MAC 주소는 게스트 KVM에 사용됩니다.
Linux 명령 줄에서 임의의 MAC 주소를 어떻게 생성합니까?
Linux 명령 줄에서 일반적으로 사용되는 표준 도구 만 필요한 솔루션을 검색합니다.
MAC 주소는 게스트 KVM에 사용됩니다.
답변:
나는 사용한다
macaddr=$(echo $FQDN|md5sum|sed 's/^\(..\)\(..\)\(..\)\(..\)\(..\).*$/02:\1:\2:\3:\4:\5/')
이 방법의 장점은 완전히 임의의 숫자에 비해 시스템의 FQDN을 기반으로 MAC 주소를 안정적으로 재생할 수 있다는 것입니다. 02
첫 번째 8 진수에 대한 그냥 공급 업체가 제공하는 MAC 주소가 아닌, 그리고 보장이 확실한 것으로한다 "로컬 할당"비트를 설정 당신이하지에서 충돌 진짜 NIC의 MAC 주소를 가진 것이다.
호스트 당 여러 MAC 주소를 생성해야하는 경우 인터페이스를 연결하기 위해 FQDN을 브리지 이름과 연결했습니다. 이것은 다른 NIC에 대한 것들을 널리 퍼뜨리는 데 도움이되었습니다.
tr -dc A-F0-9 < /dev/urandom | head -c 10 | sed -r 's/(..)/\1:/g;s/:$//;s/^/02:/'
게시 된 스크립트는 훌륭하지만 경고를 추가하고 싶습니다 : Mind the Birthday (paradoxon)!
23 명만 있어도 2 명은 같은 날 생일을 맞을 확률이 이미 50 %라는 사실에서 비롯됩니다.
사용 방법에 따라 시나리오가 다르지만 MACS를 무작위로 생성하면 약 1 백만에서 mac 번호 충돌 가능성은 2 백만에서 40 %이고 이미 87 %입니다!
몇 개만 있으면 괜찮지 만 수백 대의 서버로 서버 팜을 유지 관리 할 때 각각 수십 개의 가상 머신을 호스팅하거나 부기 관리를 위해 일부 db에서 mac을 색인으로 사용하는 경우 고유해야합니다. !
myserver% perl -e 'for ($i=0;$i<6;$i++){@m[$i]=int(rand(256));} printf "%X:%X:%X:%X:%X:%X\n",@m;'
55:C2:A5:FA:17:74
아, 스위스 군용 전기 톱이 다시 탄다. 그리고 0.2 버전에서는 첫 번째 옥텟이 02 인 Wumble의 훌륭한 점을 부끄럽게 훔치고 있습니다.
myserver% perl -e 'for ($i=0;$i<5;$i++){@m[$i]=int(rand(256));} printf "02:%X:%X:%X:%X:%X\n",@m;'
02:8E:94:A3:47:26
이러한 변형도 잘 작동합니다.
더 길게:
openssl rand -hex 6 | sed 's/\(..\)\(..\)\(..\)\(..\)\(..\)\(..\)/\1:\2:\3:\4:\5:\6/'
또는 더 짧은 :
openssl rand -hex 6 | sed 's/\(..\)/\1:/g; s/:$//'
두 변형의 부하 소비는 시간에 따른 빠른 측정에 따라 매우 유사합니다.
fold -w2|paste -sd: -
대신에 사용 했습니다 sed
. 이 sed
솔루션은 친숙한 도구를 사용하므로 기억하기가 더 쉬울 것입니다.
ec
11101100 바이너리로 시작하는 서버 중 하나에 NIC가 있습니다 .
나는이 게시물이 오래되었다는 것을 알고 있지만 OUI로 0x02로 제한되지 않고 암호로 안전한 의사 난수 MAC 주소를 원한다면 다음과 같이 빠른 플랫폼 독립적 생성기가 있습니다.
$ printf '%02x' $((0x$(od /dev/urandom -N1 -t x1 -An | cut -c 2-) & 0xFE | 0x02)); od /dev/urandom -N5 -t x1 -An | sed 's/ /:/g'
다음은 5 가지 다른 옵션이며, 모두 주소가 유니 캐스트인지 멀티 캐스트인지를 나타내는 최상위 바이트의 최하위 비트와 주소가 보편적으로 또는 로컬로 관리됩니다.
jot -w%02X -s: -r 6 1 256
openssl rand -hex 6|fold -w2|paste -sd: -
od -N6 -tx1 -An /dev/random|awk '$1=$1'|tr \ :
god -N6 -tx1 -An /dev/random|cut -c2-|tr \ :
hexdump -n6 -e'/1 ":%02X"' /dev/random|cut -c2-
jot
OS X 및 BSD와 함께 제공되지만 대부분의 Linux 배포판에는 포함되어 있지 않습니다. 이어 jot
-w
, 포맷 변경 -s
세퍼레이터를 변경하고, -r
난수를 생성한다.
od
POSIX에 있지만 hexdump
그렇지 않습니다.
OS X od
( /usr/bin/od
아래)은 GNU와 다른 출력 형식을 사용합니다 od
.
$ /usr/bin/od -N6 -tx1 -An /dev/random|tr ' ' :
:::::::::::d9::b9::d7::da::5f::96::::::::::::::::::::::::::::::::::::::::
$ god -N6 -tx1 -An /dev/random|tr ' ' :
:f5:6d:0a:3b:39:f9
od
입력 파일에 대한 인수 뒤에 배치 된 OS X의 옵션은 입력 파일의 이름으로 취급되므로 Aaron Toponce의 답변에있는 명령은 /dev/urandom
OS X와 무한정 읽습니다 od
.
$ FQDN 다음에 $ RANDOM을 추가하면 실행할 때마다 임의의 mac 주소가 제공됩니다. 이것은 스냅 샷 또는 vms 복제본을 사용하여 백업 vms를 생성하려는 사람들에게 특히 유용합니다.
macaddr=$(echo $FQDN$RANDOM|md5sum|sed 's/^\(..\)\(..\)\(..\)\(..\)\(..\).*$/02:\1:\2:\3:\4:\5/')
Bash 4.4.12 (1) 릴리스에 대해 테스트 한 순수한 bash 버전은 다음과 같습니다.
read -N6 b </dev/urandom
LC_ALL=C printf "%02x:%02x:%02x:%02x:%02x:%02x\n" "'${b:0:1}" "'${b:1:1}" "'${b:2:1}" "'${b:3:1}" "'${b:4:1}" "'${b:5:1}"
첫 줄은 6 글자를 읽습니다 /dev/urandom
. 그런 다음 C 문자 세트를 사용하여 각 문자의 0으로 채워진 16 진수 값을 콜론으로 구분하여 인쇄하십시오 (개행은 선택 사항이지만 값을 인쇄하는 데 유용합니다).
printf를 사용하여 문자 값 추출은 POSIX printf 문서에 정의되어 있습니다.
선행 문자가 작은 따옴표 또는 큰 따옴표 인 경우 값은 작은 따옴표 또는 큰 따옴표 뒤에 오는 문자의 기본 코드 세트의 숫자 값이어야합니다.