Linux 명령 줄에서 임의의 MAC 주소를 생성하는 방법 줄에서 임의의 MAC 주소를 어떻게

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에 대한 것들을 널리 퍼뜨리는 데 도움이되었습니다.


답변

게시 된 스크립트는 훌륭하지만 경고를 추가하고 싶습니다 : 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/:$//'

두 변형의 부하 소비는 시간에 따른 빠른 측정에 따라 매우 유사합니다.


답변

나는이 게시물이 오래되었다는 것을 알고 있지만 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'

답변

wombie의 답변을 기반으로 한 또 다른 내용이 있습니다.

macaddr=$(dd if=/dev/urandom bs=1024 count=1 2>/dev/null|md5sum|sed 's/^\(..\)\(..\)\(..\)\(..\)\(..\)\(..\).*$/\1:\2:\3:\4:\5:\6/')
echo $macaddr

답변

다음은 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-

jotOS X 및 BSD와 함께 제공되지만 대부분의 Linux 배포판에는 포함되어 있지 않습니다. 이어 jot -w, 포맷 변경 -s세퍼레이터를 변경하고, -r난수를 생성한다.

odPOSIX에 있지만 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/urandomOS X와 ​​무한정 읽습니다 od.