কীভাবে লিনাক্স কমান্ড লাইন থেকে একটি এলোমেলো ম্যাক ঠিকানা তৈরি করা যায়


26

আমি কীভাবে লিনাক্স কমান্ড লাইন থেকে একটি এলোমেলো ম্যাক ঠিকানা তৈরি করতে পারি?

আমি এমন একটি সমাধান অনুসন্ধান করি যা কেবলমাত্র লিনাক্স কমান্ড লাইনে সাধারণত স্ট্যান্ডার্ড সরঞ্জামগুলির প্রয়োজন।

ম্যাক ঠিকানাটি কোনও অতিথি কেভিএমের জন্য ব্যবহার করা হবে।

উত্তর:


46

আমি ব্যবহার করি

macaddr=$(echo $FQDN|md5sum|sed 's/^\(..\)\(..\)\(..\)\(..\)\(..\).*$/02:\1:\2:\3:\4:\5/')

পুরোপুরি এলোমেলো সংখ্যার উপরে এই পদ্ধতির সুবিধাটি হ'ল মেশিনের এফকিউডিএন এর উপর ভিত্তি করে ম্যাক ঠিকানাটি নির্ভরযোগ্যভাবে পুনরায় উত্পাদন করা সম্ভব, যা আমি মাঝে মাঝে দরকারী বলে মনে করি। 02প্রথম অক্টেটের জন্য কেবল "স্থানীয়ভাবে নির্ধারিত" বিট সেট করা হয়েছে, এটি স্পষ্ট করে তোলে যে এটি কোনও বিক্রেতার সরবরাহকৃত ম্যাক ঠিকানা নয়, এবং গ্যারান্টি দেয় যে আপনি আসল এনআইসির ম্যাক ঠিকানার সাথে সংঘর্ষ করবেন না।

আপনার যদি হোস্টের জন্য একাধিক ম্যাক ঠিকানা উত্পন্ন করার দরকার হয়, আমি ইন্টারফেসের সাথে সংযোগের জন্য ব্রিজের নাম দিয়ে এফকিউডিএন সংযুক্ত করেছিলাম; এটি বিভিন্ন এনআইসির জন্য জিনিস ছড়িয়ে দেওয়ার জন্য ভাল কাজ করেছে।


প্রজননযোগ্যতার জন্য +1; নির্দিষ্ট অ্যাপ্লিকেশনগুলির জন্য, যা এটি আমার জন্য আরও উন্নত পদ্ধতিতে পরিণত করে।
ম্যাডহ্যাটার মনিকে

অনেক ধন্যবাদ, আমি এটিকে পুনরুত্পাদনযোগ্য করার ধারণাটি পছন্দ করি।
এরিক সজিল্যান্ড

প্লাস কোনও ম্যাক ঠিকানার বিরোধের সম্ভাব্য ইভেন্টে আপনি এলোমেলোভাবে দুবার একই ম্যাকটি উত্পাদন করতে চান
পিটার এইচ

3
বিকল্প হিসাবে আপনি ব্যবহার করতে পারেনtr -dc A-F0-9 < /dev/urandom | head -c 10 | sed -r 's/(..)/\1:/g;s/:$//;s/^/02:/'
ALex_hha

1
এটি একটি "বিকল্প", এই অর্থে যে এটি কি আমার স্নিপেট করে করার জন্য একটি সম্পূর্ণ ভিন্ন শেষ ফলাফল উৎপন্ন একমাত্র আছে ...
womble

8

পোস্ট করা স্ক্রিপ্টগুলি ভাল, তবে আমি একটি সতর্কতা যুক্ত করতে চাই: জন্মদিনের (প্যারাডক্সন) মন দিন!

এটি আসল থেকে আসে যে আপনার কাছে মাত্র 23 জন লোক থাকলেও ইতিমধ্যে সম্ভাবনা 50% রয়েছে যে তাদের মধ্যে 2 জন একই দিনে জন্মদিন করেছেন।

এটি আপনি কীভাবে ব্যবহার করেন তা আপনার দৃশ্যের উপর নির্ভর করে, তবে আপনি যদি এলোমেলোভাবে এমএসিএস উত্পন্ন করেন তবে ম্যাক সংখ্যা সংঘর্ষের জন্য আপনার সম্ভাবনা প্রায় 2 মিলিয়ন 40 মিলিয়ন হবে এটি ইতিমধ্যে ৮ 87%!

আপনার যদি কেবল দু'জনের প্রয়োজন হয় তবে এটি ঠিক আছে, তবে আপনি যখন কয়েকশ সার্ভার সহ একটি সার্ভার ফার্ম বজায় রাখেন, তাদের প্রত্যেকটি দশেক ভার্চুয়াল মেশিনকে হোস্ট করে, বা যদি আপনি ম্যাকগুলি বুককিপিংয়ের জন্য কিছু ডিবিতে সূচক হিসাবে ব্যবহার করেন এবং আপনার অসুবিধাগুলির প্রয়োজন হয় সাবধান !


ধন্যবাদ, জন্মদিনের প্যারাডক্স সম্পর্কে সতর্কতার জন্য! আমার ক্ষেত্রে আমি ঝুঁকি নেব কারণ আমি প্রায় 20 ম্যাক ঠিকানা উত্পন্ন করব।
এরিক সিজলুন্ড

3
আপনি যদি একই হোস্টিং দশটি ভার্চুয়াল মেশিনের প্রতিটি হোস্টিং শত শত সার্ভার চালাচ্ছেন তবে ম্যাক অ্যাড্রেস সংঘর্ষের ঝুঁকির চেয়ে আরও বড় সমস্যা পেয়েছেন।
ওম্বল

1
" এটি থেকে এসেছে যে আপনার মাত্র 23 জন লোক থাকলেও ইতিমধ্যে সম্ভাবনা 50% রয়েছে যে তাদের মধ্যে 2 জনের জন্মদিন একই দিনে রয়েছে। " এটি এমনকি দূর থেকে সত্যও নয়। সেখানে 50% সম্ভাবনা যে 23 এর দুই জনের একই জন্মদিন বার্ষিকী, আছে প্রায় না একই জন্মদিন।
রন মউপিন

5
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

ধন্যবাদ ম্যাডহ্যাটার, আমি আপনার দ্বিতীয় রূপটি চেষ্টা করেছি এবং এটি কার্যকর হয়েছে। খুব সুন্দর!
এরিক সিজলুন্ড

5

এই রূপগুলি পাশাপাশি কাজ করে।

আর:

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: -পরিবর্তে ব্যবহার করেছেন sedsedসমাধান সম্ভবত হিসাবে এটি একটি পরিচিত টুল ব্যবহার মনে রাখা সহজ - যদিও আমি তার / তার উত্তর থেকে আরো শিখেছি।
অ্যান্টনি জি - মনিকার পক্ষে ন্যায়বিচার

আমি মনে করি প্রথম কমান্ডটি কাজ করবে না কারণ এটি প্রথম বিটটিকে সমান হতে দেয় না!
amrx

হাই @ এমআরএক্স, আপনি কি নিশ্চিত যে ম্যাকের প্রথম বিটটি অবশ্যই সমান হওয়া উচিত? আমার এক সার্ভারে আমার এনআইসি আছে, যা ecবাইনারি হিসাবে 11101100 দিয়ে শুরু হয় ...
জারোস্লাভ কুচেরা

1
হাই @ জারোস্লাভকুশেরা, ইউনিকাস্ট ম্যাক ঠিকানাগুলি অবশ্যই প্রথম বাইটে 1 এর স্থান বিট সেট করতে হবে না। এটি "গ্রুপ" (মাল্টিকাস্ট / সম্প্রচার) বিট। যদি আপনি নিজের ম্যাক ঠিকানা তৈরি করেন তবে গ্যারান্টিযুক্ত বিশ্বব্যাপী অনন্য ম্যাক ঠিকানা থেকে পৃথক করার জন্য আপনাকে প্রথম বাইটে 2 টি স্থানের বিট ("স্থানীয়ভাবে পরিচালিত" বিট) সেট করার কথা রয়েছে।
amrx

4

আমি জানি এই পোস্টটি পুরানো, তবে ভবিষ্যতের দর্শকদের জন্য, আপনি যদি 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'

2

গর্ভের উত্তরের উপর ভিত্তি করে এখানে আরও একটি রয়েছে:

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

এমডি 5সামের মাধ্যমে ইউরানডম আউটপুট চালানোর দরকার নেই; আপনি কেবল অ্যারোন টপোনসের উত্তর অনুসারে অদ্ভুত ব্যবহার করতে পারেন।
ওম্বল

2

এখানে আরও পাঁচটি অপশন রয়েছে, যার মধ্যে সমস্ত উল্লেখযোগ্য বাইটের সর্বনিম্ন উল্লেখযোগ্য বিটের জন্য এলোমেলোভাবে বিট ব্যবহার করে যা নির্দেশ করে যে ঠিকানাটি ইউনিকাস্ট বা মাল্টিকাস্ট এবং সবচেয়ে উল্লেখযোগ্য বাইটের দ্বিতীয়-সর্বনিম্ন উল্লেখযোগ্য বিটের জন্য যা ঠিকানাটি নির্দেশ করে কিনা সর্বজনীন বা স্থানীয়ভাবে পরিচালিত।

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


1

আপনি কেবলমাত্র $ FQDN এর পরে একটি $ RANDOM যুক্ত করতে পারেন এবং এটি প্রতিবার চালানোর সময় আপনাকে এলোমেলো ম্যাক ঠিকানা দেয়। এটি বিশেষত পোপলদের জন্য সহায়ক যারা স্ন্যাপশট বা ভিএমএসের ক্লোন ব্যবহার করে ব্যাকআপ ভিএমএস তৈরি করতে চান।

macaddr=$(echo $FQDN$RANDOM|md5sum|sed 's/^\(..\)\(..\)\(..\)\(..\)\(..\).*$/02:\1:\2:\3:\4:\5/')

1
মনে রাখবেন যে $ RANDOM ব্যাশে উপলভ্য, তবে অন্যান্য শেলগুলিতে এটি উপলভ্য নয়।
মাইকেল হ্যাম্পটন


0

পাইথন ওয়ান-লাইনার:

python3 -c 'import os; print(":".join(["{:02x}".format(x) for x in b"\02x" + os.urandom(5)]))'

0

কেবল মজাদার জন্য, এখানে একটি খাঁটি বাশ সংস্করণ রয়েছে, যা বাশ ৪.৪.১২ (১) এর বিরুদ্ধে পরীক্ষা করা হয়েছে - দয়া করে:

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চ্ছিক তবে মানটি মুদ্রণের জন্য দরকারী)।

প্রিন্টফ ব্যবহার করে একটি চরিত্রের মান আহরণ করা পসিক্স প্রিন্টফ ডকুমেন্টেশনে সংজ্ঞায়িত হয় :

শীর্ষস্থানীয় অক্ষরটি যদি একক-উদ্ধৃতি বা ডাবল-উদ্ধৃতি হয় তবে মানটি একক-উদ্ধৃতি বা ডাবল-উদ্ধৃতি অনুসরণ করে অক্ষরের অন্তর্নিহিত কোডসেটের সংখ্যাসূচক মান হবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.