Comment puis-je générer une adresse mac aléatoire valide avec bash.
La première moitié de l'adresse doit toujours rester la même comme celle-ci
00-60-2F-xx-xx-xx
juste la valeur x doit être générée au hasard?
bash
mac-address
NDA
la source
la source
echo -n 00-60-2F; dd bs=1 count=3 if=/dev/random 2>/dev/null |hexdump -v -e '/1 "-%02X"'
Réponses:
Voici un poisson.
Ce script shell va générer la chaîne aléatoire que vous recherchez:
J'avais juste quelque chose ici qui montrait comment l'exécuter à partir de la ligne de commande, mais après avoir regardé la solution compliquée (mais votée) de Dennis Williamson, je vois que la réponse que les gens attendent est celle où ils n'ont pas à faire de travail se.
la source
Dans le passé, je l'ai fait en utilisant:
mais cela ne les rendra que dans la plage de 0 à 9. Pour mes besoins, c'était assez bon.
Une meilleure solution serait probablement d'utiliser printf:
Voici comment cela fonctionne:
la source
%02X
donnerait une lettre majuscule.Ou en python:
Notez que la version python utilise uniquement un champ large de 16 pour générer un caractère hexadécimal, vous n'avez donc pas à vous soucier du remplissage nul - approche modifiée pour répondre à un commentaire.
la source
00-60-2F-8B-5-2C
,00-60-2F-A-71-97
,00-60-2F-82-F1-4
.À l'aide d'outils standard, soit
ou
pourrait être le plus court de tous.
la source
Les clés du fonctionnement:
LC_CTYPE=C
- autorise les caractères> 0x7FIFS=
- désactive l'interprétation de\t
(tab),\n
(nouvelle ligne) et de l'espace-d ''
- permet les sauts de ligne-r
permet\
(et devrait presque toujours être utilisé par habitude avecread
)-%02x\n
fait que la sortie est un tiret littéral suivi d'un nombre hexadécimal à deux chiffres incluant un zéro de tête, le cas échéant. La nouvelle ligne est superflue ici et pourrait être omise.read
obtient un seul octet (-n 1
) de/dev/urandom
0 à 255 (00
àFF
).Le guillemet simple dans le dernier argument de
printf
dans la boucle fait que le caractère est sorti comme sa valeur numérique ("A" est sorti comme "65"). Voir la spécification POSIX pour savoirprintf
où il est indiqué:la source
IFS= read …
éviter de replier 09 0a et 20 (les caractères IFS habituels) en 00.-d ''
. Je vais corriger ma réponse. Merci de me le faire savoir.-r
qui protège `` est tombé. Je souhaite que la bonne gestion des données binaires dans les programmes shell ne soit pas si compliquée. ☺ Il semble impossible de représenter avec précision 00 au milieu de la chaîne. Votre méthode à caractère unique à la fois gère 00 grâce à la coopération pratique (conçue?) Entreread
, l'interpolation de chaînes et la façon dontprintf
traite l'argument à un caractère'
. Soupir.hexdump -C
.Le moyen le plus court que j'ai pu trouver était d'utiliser directement hexdump
Testé sur GNU / Linux
la source
hexdump -n3 -e'/3 "00-60-2F" 3/1 "-%02X"' /dev/random
est un peu plus court :-)Une autre solution en ligne
Même chose en majuscules
Générez-le pour une variable d'environnement Bash
Détails:
od (vidage octal)
-An
Supprime la principale représentation d'adresse (bruit supplémentaire) de la sortie.-N3
Limitez la sortie à trois octets.-t xC
Sortie en hexadécimal, style ASCII, comme vous le souhaitez./dev/urandom
Pseudo-fichier à nombres aléatoires du noyau Linux.sed (éditeur de flux) Pour la substitution d'espace à trait d'union.
-e <SCRIPT>
exécutez le script sed.tr (traduction de chaîne) Facultatif, dans cet exemple. J'aime les adresses MAC majuscules dans mes scripts / environnement.
la source
la source
Cela devrait fonctionner
la source
la source
Celui-ci fonctionne également. La sortie est tout en majuscules comme requis.
la source
Cela fonctionne dans le
#!/bin/sh
script shell ( ) classique :Ou, si vous souhaitez avoir un préfixe personnalisé:
Exemple d'utilisation:
la source
Une autre option consiste à utiliser
jot
:-w
modifie le format,-s
modifie le séparateur et-r
génère des nombres aléatoires.Les commandes utilisant
od
dans les réponses publiées par artistoex et zero2cx ajoutent des tirets supplémentaires à la sortie avec OS Xod
, mais cela ne fait pas:OS X
od
(/usr/bin/od
ci-dessous) utilise un format de sortie différent de GNUod
:la source
jot -w%02X -s- -r 3 1 256
àjot -w%02X -s- -r 3 0 256
.Sous Linux:
Explication:
Sous Linux,
/proc/sys/kernel/random/uuid
renvoie un nouvel UUID de type 4 (aléatoire) chaque fois que vous le lisez. La plupart de ses caractères sont des chiffres hexadécimaux (pseudo) aléatoires, nous pouvons donc les utiliser. Par exemple:Il suffit maintenant d'imprimer
00-60-2f-
(sans nouvelle ligne) en premier:Avantages:
printf
etcut
sont des outils POSIX;Les inconvénients:
/proc/sys/kernel/random/uuid
peut ne pas être disponible sur certains systèmes;la source
Un liner (bash)
résultat
la source