আমি কীভাবে লিনাক্স কমান্ড লাইন থেকে একটি এলোমেলো ম্যাক ঠিকানা তৈরি করতে পারি?
আমি এমন একটি সমাধান অনুসন্ধান করি যা কেবলমাত্র লিনাক্স কমান্ড লাইনে সাধারণত স্ট্যান্ডার্ড সরঞ্জামগুলির প্রয়োজন।
ম্যাক ঠিকানাটি কোনও অতিথি কেভিএমের জন্য ব্যবহার করা হবে।
আমি কীভাবে লিনাক্স কমান্ড লাইন থেকে একটি এলোমেলো ম্যাক ঠিকানা তৈরি করতে পারি?
আমি এমন একটি সমাধান অনুসন্ধান করি যা কেবলমাত্র লিনাক্স কমান্ড লাইনে সাধারণত স্ট্যান্ডার্ড সরঞ্জামগুলির প্রয়োজন।
ম্যাক ঠিকানাটি কোনও অতিথি কেভিএমের জন্য ব্যবহার করা হবে।
উত্তর:
আমি ব্যবহার করি
macaddr=$(echo $FQDN|md5sum|sed 's/^\(..\)\(..\)\(..\)\(..\)\(..\).*$/02:\1:\2:\3:\4:\5/')
পুরোপুরি এলোমেলো সংখ্যার উপরে এই পদ্ধতির সুবিধাটি হ'ল মেশিনের এফকিউডিএন এর উপর ভিত্তি করে ম্যাক ঠিকানাটি নির্ভরযোগ্যভাবে পুনরায় উত্পাদন করা সম্ভব, যা আমি মাঝে মাঝে দরকারী বলে মনে করি। 02
প্রথম অক্টেটের জন্য কেবল "স্থানীয়ভাবে নির্ধারিত" বিট সেট করা হয়েছে, এটি স্পষ্ট করে তোলে যে এটি কোনও বিক্রেতার সরবরাহকৃত ম্যাক ঠিকানা নয়, এবং গ্যারান্টি দেয় যে আপনি আসল এনআইসির ম্যাক ঠিকানার সাথে সংঘর্ষ করবেন না।
আপনার যদি হোস্টের জন্য একাধিক ম্যাক ঠিকানা উত্পন্ন করার দরকার হয়, আমি ইন্টারফেসের সাথে সংযোগের জন্য ব্রিজের নাম দিয়ে এফকিউডিএন সংযুক্ত করেছিলাম; এটি বিভিন্ন এনআইসির জন্য জিনিস ছড়িয়ে দেওয়ার জন্য ভাল কাজ করেছে।
tr -dc A-F0-9 < /dev/urandom | head -c 10 | sed -r 's/(..)/\1:/g;s/:$//;s/^/02:/'
পোস্ট করা স্ক্রিপ্টগুলি ভাল, তবে আমি একটি সতর্কতা যুক্ত করতে চাই: জন্মদিনের (প্যারাডক্সন) মন দিন!
এটি আসল থেকে আসে যে আপনার কাছে মাত্র 23 জন লোক থাকলেও ইতিমধ্যে সম্ভাবনা 50% রয়েছে যে তাদের মধ্যে 2 জন একই দিনে জন্মদিন করেছেন।
এটি আপনি কীভাবে ব্যবহার করেন তা আপনার দৃশ্যের উপর নির্ভর করে, তবে আপনি যদি এলোমেলোভাবে এমএসিএস উত্পন্ন করেন তবে ম্যাক সংখ্যা সংঘর্ষের জন্য আপনার সম্ভাবনা প্রায় 2 মিলিয়ন 40 মিলিয়ন হবে এটি ইতিমধ্যে ৮ 87%!
আপনার যদি কেবল দু'জনের প্রয়োজন হয় তবে এটি ঠিক আছে, তবে আপনি যখন কয়েকশ সার্ভার সহ একটি সার্ভার ফার্ম বজায় রাখেন, তাদের প্রত্যেকটি দশেক ভার্চুয়াল মেশিনকে হোস্ট করে, বা যদি আপনি ম্যাকগুলি বুককিপিংয়ের জন্য কিছু ডিবিতে সূচক হিসাবে ব্যবহার করেন এবং আপনার অসুবিধাগুলির প্রয়োজন হয় সাবধান !
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
আহ, ওল ' সুইস আর্মি চেইনসো আবার চড়েছে । এবং সংস্করণ ০.২ এর মাধ্যমে, আমি লজ্জাজনকভাবে প্রথম অক্টেটের 02 সম্পর্কে হওয়ার বিষয়ে ওয়াম্বলের দুর্দান্ত পয়েন্টটি চুরি করছি:
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
পসিক্সে রয়েছে তবে hexdump
তা নেই।
ওএস এক্স এর od
( /usr/bin/od
নীচে) জিএনইউ থেকে আলাদা আউটপুট ফর্ম্যাট ব্যবহার করে 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
কোনও ইনপুট ফাইলের জন্য আর্গুমেন্টের পরে ওএস এক্স-এর বিকল্পগুলিতে ইনপুট ফাইলের নাম হিসাবে বিবেচনা করা হয়, সুতরাং অ্যারন টপোনসের উত্তরের কমান্ডটি /dev/urandom
অনির্দিষ্টকালের জন্য ওএস এক্স এর সাথে পড়ে od
।
আপনি কেবলমাত্র $ FQDN এর পরে একটি $ RANDOM যুক্ত করতে পারেন এবং এটি প্রতিবার চালানোর সময় আপনাকে এলোমেলো ম্যাক ঠিকানা দেয়। এটি বিশেষত পোপলদের জন্য সহায়ক যারা স্ন্যাপশট বা ভিএমএসের ক্লোন ব্যবহার করে ব্যাকআপ ভিএমএস তৈরি করতে চান।
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 ' ' ':'
কেবল মজাদার জন্য, এখানে একটি খাঁটি বাশ সংস্করণ রয়েছে, যা বাশ ৪.৪.১২ (১) এর বিরুদ্ধে পরীক্ষা করা হয়েছে - দয়া করে:
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-ভরা হেক্স মানটি কোলন দিয়ে পৃথক করুন (নতুন লাইনটি alচ্ছিক তবে মানটি মুদ্রণের জন্য দরকারী)।
প্রিন্টফ ব্যবহার করে একটি চরিত্রের মান আহরণ করা পসিক্স প্রিন্টফ ডকুমেন্টেশনে সংজ্ঞায়িত হয় :
শীর্ষস্থানীয় অক্ষরটি যদি একক-উদ্ধৃতি বা ডাবল-উদ্ধৃতি হয় তবে মানটি একক-উদ্ধৃতি বা ডাবল-উদ্ধৃতি অনুসরণ করে অক্ষরের অন্তর্নিহিত কোডসেটের সংখ্যাসূচক মান হবে।