¿Cómo puedo generar una dirección de mac aleatoria válida con bash?
La primera mitad de la dirección siempre debe permanecer igual así
00-60-2F-xx-xx-xx
solo el valor x debe generarse al azar?
bash
mac-address
NES
fuente
fuente

echo -n 00-60-2F; dd bs=1 count=3 if=/dev/random 2>/dev/null |hexdump -v -e '/1 "-%02X"'Respuestas:
Aquí hay un pez.
Este script de shell generará la cadena aleatoria que busca:
Acabo de tener algo aquí que mostró cómo ejecutarlo desde la línea de comandos, pero después de mirar a Dennis Williamson una solución enrevesada (pero votada) veo que la respuesta que la gente espera es aquella en la que no tienen que hacer ningún trabajo sí mismos.
fuente
En el pasado hice esto usando:
pero eso solo los hará en el rango 0-9. Para mis propósitos, eso fue lo suficientemente bueno.
Probablemente una mejor solución sería usar printf:
Así es como funciona:
fuente
%02Xdaría una letra mayúscula.O en python:
Tenga en cuenta que la versión de Python solo usa un campo de 16 de ancho para generar un carácter hexadecimal, por lo que no tiene que preocuparse por el relleno cero: enfoque modificado para abordar un comentario.
fuente
00-60-2F-8B-5-2C,00-60-2F-A-71-97,00-60-2F-82-F1-4.Usando herramientas estándar, ya sea
o
podría ser el más corto de todos.
fuente
Las claves de la forma en que esto funciona:
LC_CTYPE=C- permite caracteres> 0x7FIFS=- desactiva la interpretación de\t(tab),\n(nueva línea) y espacio-d ''- permite nuevas líneas-rpermite\(y casi siempre debe usarse por hábito conread)-%02x\nhace que la salida sea un guión literal seguido de un número hexadecimal de dos dígitos que incluye un cero inicial, si corresponde. La nueva línea es superflua aquí y podría omitirse.readconsigue un solo byte (-n 1) a partir de/dev/urandomen el rango de 0 a 255 (00aFF).La comilla simple en el último argumento
printfen el bucle hace que el carácter se muestre como su valor numérico ("A" se muestra como "65"). Consulte la especificación POSIX para saberprintfdónde dice:fuente
IFS= read …evitarse doblar 09 0a y 20 (los caracteres IFS habituales) en 00.-d ''. Arreglaré mi respuesta. Gracias por hacérmelo saber.-rcayó el que protege `\`. Desearía que el manejo adecuado de los datos binarios en los programas de shell no fuera tan complicado. ☺ Parece imposible representar con precisión 00 en el medio de la cadena. Su método de un solo carácter a la vez maneja 00 en virtud de la cooperación conveniente (¿diseñada?) Entre lareadinterpolación de cadenas y cómoprintftrata el argumento de un carácter'. Suspiro.hexdump -C.La forma más corta que pude encontrar fue usando hexdump directamente
Probado en GNU / Linux
fuente
hexdump -n3 -e'/3 "00-60-2F" 3/1 "-%02X"' /dev/randomes un poco más corto :-)Otra solución de una línea
Lo mismo en mayúsculas
Generarlo para una variable de entorno Bash
Detalles:
od (volcado octal)
-AnSuprime la representación de dirección principal (ruido adicional) de la salida.-N3Limite la salida a tres bytes.-t xCSalida en hexadecimal, estilo de caracteres ASCII, según se desee./dev/urandomPseudoarchivo de números aleatorios del kernel de Linux.sed (editor de flujo) Para la sustitución de espacios con guiones.
-e <SCRIPT>ejecuta el script sed.tr (traducción de cadena) Opcional, en este ejemplo. Me gustan las direcciones MAC mayúsculas en mis scripts / entorno.
fuente
fuente
Esto debería funcionar
fuente
fuente
Este también funciona. La salida es todo en mayúsculas según sea necesario.
fuente
Esto funciona en el
#!/bin/shscript clásico de shell ( ):O, si quieres tener un prefijo personalizado:
Ejemplo de uso:
fuente
Otra opción es usar
jot:-wcambia el formato,-scambia el separador y-rgenera números aleatorios.Los comandos que se utilizan
oden las respuestas publicadas por artistoex y zero2cx agregan guiones adicionales a la salida con OS Xod, pero esto no:OS X
od(/usr/bin/odabajo) usa un formato de salida diferente al de GNUod:fuente
jot -w%02X -s- -r 3 1 256ajot -w%02X -s- -r 3 0 256.En Linux:
Explicación:
En Linux
/proc/sys/kernel/random/uuiddevuelve un nuevo UUID de tipo 4 (aleatorio) cada vez que lo lee. La mayoría de sus caracteres son dígitos hexadecimales (pseudo) aleatorios, por lo que podemos usarlos. P.ej:Ahora es suficiente imprimir
00-60-2f-(sin nueva línea) primero:Pros:
printfycutson herramientas POSIX;Contras:
/proc/sys/kernel/random/uuidpuede no estar disponible en algunos sistemas;fuente
Un trazador de líneas (bash)
resultado
fuente