मैं लिनक्स कमांड लाइन से एक यादृच्छिक मैक पता कैसे उत्पन्न करूं?
मैं एक ऐसे समाधान की खोज करता हूं जिसमें केवल लिनक्स कमांड लाइन पर आमतौर पर पाए जाने वाले मानक टूल की आवश्यकता होती है।
मैक पते का उपयोग अतिथि KVM के लिए किया जाएगा।
मैं लिनक्स कमांड लाइन से एक यादृच्छिक मैक पता कैसे उत्पन्न करूं?
मैं एक ऐसे समाधान की खोज करता हूं जिसमें केवल लिनक्स कमांड लाइन पर आमतौर पर पाए जाने वाले मानक टूल की आवश्यकता होती है।
मैक पते का उपयोग अतिथि KVM के लिए किया जाएगा।
जवाबों:
मैं उपयोग करता हूं
macaddr=$(echo $FQDN|md5sum|sed 's/^\(..\)\(..\)\(..\)\(..\)\(..\).*$/02:\1:\2:\3:\4:\5/')
इस पद्धति का लाभ, पूरी तरह से यादृच्छिक संख्या में, यह है कि मशीन के FQDN के आधार पर मैक पते को मज़बूती से पुन: पेश करना संभव है, जो मुझे कभी-कभी उपयोगी लगता है। 02
पहली ओकटेट के लिए सिर्फ "स्थानीय रूप से सौंपा" सा है, जो यह स्पष्ट है कि यह एक विक्रेता के द्वारा उपलब्ध कराया मैक पता नहीं है, और गारंटी नहीं देता है कि आप सेट टकराती नहीं एक असली एनआईसी का MAC पता के साथ होगा।
यदि आपको प्रति मेजबान कई मैक पते उत्पन्न करने की आवश्यकता है, तो मैंने इंटरफ़ेस से कनेक्ट करने के लिए पुल के नाम के साथ FQDN को संक्षिप्त किया; इसने विभिन्न एनआईसी के लिए चीजों को फैलाने का अच्छा काम किया।
tr -dc A-F0-9 < /dev/urandom | head -c 10 | sed -r 's/(..)/\1:/g;s/:$//;s/^/02:/'
पोस्ट की गई स्क्रिप्ट अच्छी हैं, लेकिन मैं एक चेतावनी जोड़ना चाहता हूं: माइंड द बर्थडे (विरोधाभास)!
यह इस तथ्य से आता है कि भले ही आपके पास सिर्फ 23 लोग हों, लेकिन मौका पहले ही 50% है कि उनमें से 2 का उसी दिन जन्मदिन है।
यह आपके परिदृश्य पर निर्भर करता है कि आप इसका उपयोग कैसे करते हैं, लेकिन यदि आप बेतरतीब ढंग से एमएसीएस उत्पन्न करते हैं, तो लगभग 1 मिलियन मैक नंबर क्लैश के लिए आपका मौका 40% है 2 मिलियन पर यह पहले से ही 87% है!
यदि आपको बस एक जोड़े की आवश्यकता है तो यह ठीक है, लेकिन जब आप सैकड़ों सर्वरों के साथ एक सर्वर फ़ार्म बनाए रखते हैं, तो उनमें से प्रत्येक दसियों वर्चुअल मशीनों की मेजबानी करता है, या यदि आप बहीखाता पद्धति के लिए कुछ db में इंडेक्स के रूप में macs का उपयोग करते हैं और आपको चाहिए कि वे सावधान रहें !
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 के माध्यम से, मैं पहली बार ओक्टेट होने के बारे में अनजाने में वूमल के उत्कृष्ट बिंदु को चुरा रहा हूं:
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 के साथ शुरू होता है ...
मुझे पता है कि यह पोस्ट पुरानी है, लेकिन भविष्य के आगंतुकों के लिए, यदि आप OUI के रूप में 0x02 तक सीमित किए बिना एक क्रिप्टोग्राफिक रूप से सुरक्षित छद्म रूप से मैक पते चाहते हैं, तो यहां एक तेज़ मंच प्लेटिनम जनरेटर है:
$ 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'
यहाँ एक और एक है, जो ज़ोंबी के उत्तर पर आधारित है:
macaddr=$(dd if=/dev/urandom bs=1024 count=1 2>/dev/null|md5sum|sed 's/^\(..\)\(..\)\(..\)\(..\)\(..\)\(..\).*$/\1:\2:\3:\4:\5:\6/')
echo $macaddr
यहां पांच अन्य विकल्प दिए गए हैं, जिनमें से सभी सबसे महत्वपूर्ण बाइट के कम से कम महत्वपूर्ण बिट के लिए यादृच्छिक बिट्स का उपयोग करते हैं जो इंगित करता है कि क्या पता यूनिकास्ट या मल्टीकास्ट है और सबसे महत्वपूर्ण बाइट के दूसरे-कम से कम महत्वपूर्ण बिट के लिए जो पता बताता है कि क्या है सार्वभौमिक या स्थानीय रूप से प्रशासित।
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
ओएस एक्स और बीएसडी के साथ आता है लेकिन अधिकांश लिनक्स वितरण के साथ नहीं। में 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 के विकल्पों को इनपुट फ़ाइलों के नाम के रूप में माना जाता है, इसलिए हारून टोपोन्से द्वारा जवाब में दिए गए आदेश /dev/urandom
ओएस एक्स के साथ अनिश्चित काल से पढ़ते हैं od
।
आप $ FQDN के बाद केवल $ RANDOM जोड़ सकते हैं और इससे आपको हर बार इसे चलाने के दौरान यादृच्छिक मैक पते मिलेंगे। यह विशेष रूप से पॉपी के लिए सहायक है जो स्नैपशॉट या वीएमएस के क्लोन का उपयोग करके बैकअप vms बनाना चाहते हैं।
macaddr=$(echo $FQDN$RANDOM|md5sum|sed 's/^\(..\)\(..\)\(..\)\(..\)\(..\).*$/02:\1:\2:\3:\4:\5/')
मैं उपयोग करता हूं:
echo -n 02; od -t x1 -An -N 5 /dev/urandom | tr ' ' ':'
बस मज़े के लिए, यहाँ एक शुद्ध बैश संस्करण है, जिसे बैश 4.4.12 (1) -रेज़ के खिलाफ परीक्षण किया गया है:
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
; फिर सी वर्ण सेट का उपयोग करके एक वर्ण के साथ अलग किए गए प्रत्येक वर्ण का 0-भरा हेक्स मान प्रिंट करें (मान को प्रिंट करने के लिए नई पंक्ति वैकल्पिक लेकिन उपयोगी है)।
Printf का उपयोग करके वर्ण का मान निकालना POSIX प्रिंटफ प्रलेखन में परिभाषित किया गया है :
यदि अग्रणी चरित्र एकल-उद्धरण या डबल-उद्धरण है, तो मूल्य एकल-उद्धरण या दोहरे-उद्धरण के बाद वर्ण के अंतर्निहित कोडसेट में संख्यात्मक मान होगा।