সমস্ত বৈধ শ্রেণিবদ্ধ পাবলিক ইউনিকাস্ট আইপিভি 4 ঠিকানা আউটপুট দিন


10

আইপিভি 4 অ্যাড্রেসগুলি 32 বিট প্রশস্ত, এবং সুতরাং ঠিকানার জায়গার আকার 2 32 বা 4,294,967,296। তবে এটি কেবল একটি তাত্ত্বিক উপরের-আবদ্ধ। এটি সত্যিকারের পাবলিক ইন্টারনেটে ব্যবহার করা যেতে পারে এমন সমস্ত ঠিকানাগুলির সঠিক প্রতিনিধিত্ব নয়।

এই চ্যালেঞ্জের উদ্দেশ্যে, এটি ধরে নেওয়া হয় যে সমস্ত সম্বোধন শ্রেণিবদ্ধ । বাস্তবে, ঠিকানা জায়গার শ্রেণিবদ্ধ মহকুমা সিআইডিআর (ক্লাসলেস আন্তঃ-ডোমেন রাউটিং এবং ভিএলএসএম (ভেরিয়েবল দৈর্ঘ্য সাবনেট মাস্কিং)) দ্বারা বরাদ্দ করা হয়েছে , তবে এই চ্যালেঞ্জের জন্য এটি উপেক্ষা করা হয়েছে।

শ্রেণিবদ্ধ ঠিকানা স্কিম অনুসারে 3 টি শ্রেণি রয়েছে:

  • ক্লাস একটি - 0.0.0.0থেকে 127.255.255.255সঙ্গে /8নেটমাস্ক দৈর্ঘ্য
  • ক্লাস বি - 128.0.0.0থেকে 191.255.255.255সঙ্গে /16নেটমাস্ক দৈর্ঘ্য
  • ক্লাস সি - 192.0.0.0থেকে 223.255.255.255সঙ্গে /24নেটমাস্ক দৈর্ঘ্য

ক্লাস ডি (মাল্টিকাস্ট) এবং ই (সংরক্ষিত) এছাড়াও সংজ্ঞায়িত করা হয় তবে এগুলি সর্বজনীন ইউনিকাস্টের ঠিকানাগুলির জন্য ব্যবহৃত হয় না।

প্রতিটি শ্রেণি সেই শ্রেণীর জন্য নেটমাস্ক অনুযায়ী নেটওয়ার্কগুলিতে বিভক্ত হয়।

এভাবে 3.0.0.0একটি ক্লাস নেটওয়ার্কের একটি উদাহরণ। ক্লাস একটি নেটমাস্ক দৈর্ঘ্য, 8 তাই এই নেটওয়ার্কের জন্য সম্পূর্ণ ঠিকানা স্থান 3.0.0.0থেকে 3.255.255.255। তবে, প্রথম ঠিকানা ( 3.0.0.0) নেটওয়ার্ক ঠিকানা হিসাবে সংরক্ষিত এবং শেষ ঠিকানা ( 3.255.255.255) সেই নেটওয়ার্কের সম্প্রচারের ঠিকানা হিসাবে সংরক্ষিত। এভাবে ব্যবহারযোগ্য ঠিকানাগুলি প্রকৃত পরিসর 3.0.0.1থেকে 3.255.255.254যা 2 24 - 2 (= 16,777,214) মোট ঠিকানা।

একইভাবে, 200.20.30.0ক্লাস সি নেটওয়ার্কের একটি উদাহরণ। ক্লাস সি নেটমাস্ক দৈর্ঘ্য, 24, তাই এই নেটওয়ার্কের জন্য সম্পূর্ণ ঠিকানা স্থান 200.20.30.0থেকে 200.20.30.255। নেটওয়ার্ক ও ব্রডকাস্ট অ্যাড্রেস পাতার ব্যবহারযোগ্য ঠিকানাগুলি প্রকৃত পরিসীমা সরানো হচ্ছে হয় 200.20.30.1জন্য 200.20.30.254যা 2 8 2 (= 254) মোট ঠিকানাগুলি -।

ঠিকানা ব্যাপ্তিতে আরও সীমাবদ্ধতা রয়েছে যা পাবলিক ইউনিকাস্টের জন্য ব্যবহৃত হতে পারে। আরএফসি 6890 অনুসারে , অনুমোদিত না হওয়া রেঞ্জগুলি হ'ল :

  • 0.0.0.0/8 - স্থানীয় নেটওয়ার্কিং
  • 10.0.0.0/8 - ব্যক্তিগত ব্যবহার
  • 100.64.0.0/10 - অংশীদারি ঠিকানার স্থান
  • 127.0.0.0/8 - লুপব্যাক
  • 169.254.0.0/16 - স্থানীয় লিঙ্ক
  • 172.16.0.0/12- ব্যক্তিগত ব্যবহার
  • 192.0.0.0/24 - আইইটিএফ প্রোটোকল অ্যাসাইনমেন্টস
  • 192.0.2.0/24 - ডকুমেন্টেশন ব্যবহারের জন্য সংরক্ষিত
  • 192.88.99.0/24 - 6to4 রিলে যেকোনোকাস্ট
  • 192.168.0.0/16 - ব্যক্তিগত ব্যবহার
  • 198.18.0.0/15 - বেঞ্চমার্কিং
  • 198.51.100.0/24 - ডকুমেন্টেশন ব্যবহারের জন্য সংরক্ষিত
  • 203.0.113.0/24 - ডকুমেন্টেশন ব্যবহারের জন্য সংরক্ষিত

নোট করুন যে উপরের তালিকাটি দক্ষতার সাথে একটি ব্যাপ্তি নির্দিষ্ট করতে ভিএলএসআর নেটমাস্ক ব্যবহার করে। সবগুলি ক্ষেত্রেই, প্রদত্ত মাস্কের দৈর্ঘ্যের সীমাটি শুরুর জন্য সাধারণ শ্রেণিবদ্ধ মাস্ক দৈর্ঘ্যের চেয়ে কম বা সমান। সুতরাং এই ভিএলএসআর রেঞ্জগুলির প্রত্যেকটিই এক বা একাধিক শ্রেণিবদ্ধ নেটওয়ার্কের সমতুল্য। যেমন 172.16.0.0/12ক্লাস বি নেটওয়ার্ক সমতূল্য 172.16.0.0করতে 172.31.0.0বা ঠিকানা পরিসর 172.16.0.0থেকে 172.31.255.255

এই নিয়মের ব্যতিক্রম 100.64.0.0/10হ'ল ভিএলএসআর পরিসর, যা 100.0.0.0ক্লাস এ ব্যাপ্তি সহ আরও নির্দিষ্ট । সুতরাং এটি 100.0.0.0অন্যান্য ক্লাস এ রেঞ্জগুলির মতো পরিচালনা করা হবে তবে এটির মাঝখানে একটি 4,194,304-ঠিকানা গর্ত রয়েছে exception এই শ্রেণীর একটি পরিসর বৈধ ঠিকানাগুলি হতে হবে 100.0.0.0করার 100.63.255.255এবং 100.128.0.0করতে 100.255.255.254, 2 মোট 24 2 - 22 - 2 (= 12,582,910) মোট ঠিকানা।

এই চ্যালেঞ্জের লক্ষ্য হ'ল সমস্ত শ্রেণি এ, বি এবং সি ইউনিকাস্ট আইপিভি 4 অ্যাড্রেসগুলি আউটপুট দেওয়া যা বৈধভাবে কোনও পাবলিক ইন্টারনেট হোস্টের কাছে নির্ধারিত হতে পারে (যেমন উপরে বর্ণিত এগুলি বাদ দিয়ে)।

  • কোনও ইনপুট দেওয়া হবে না এবং আশা করা উচিত নয়।

  • আউটপুট আপনার ভাষার জন্য উপযুক্ত যে কোনও ফর্ম হতে পারে, উদাহরণস্বরূপ অ্যারে, তালিকা, সীমাবদ্ধ স্ট্রিং। ঠিকানাগুলি অবশ্যই স্ট্যান্ডার্ড ডটেড দশমিক ফর্ম্যাটে আউটপুট হতে হবে।

  • আউটপুট অর্ডার কিছু যায় আসে না।

  • বিল্টিনগুলি যা নির্দিষ্টভাবে ঠিকানাগুলির সীমাবদ্ধতা দেয় তা অনুমোদিত নয়। একইভাবে পাবলিক ইন্টারনেটের জন্য বিজিপি (বা অন্যান্য প্রোটোকল) রাউটিং টেবিলকে গতিশীলভাবে পরিদর্শন করার যে কোনও পদ্ধতি অনুমোদিত নয়।

সংখ্যাগতভাবে সর্বনিম্ন ঠিকানা হবে 1.0.0.1এবং সংখ্যায় সর্বোচ্চ হবে 223.255.255.254


এই চ্যালেঞ্জটি সমস্ত আইপিভি 6 অ্যাড্রেস মুদ্রণের অনুরূপ , তবে বিধিনিষেধের কারণে তুচ্ছ-পৃথক পৃথক বাস্তবায়ন প্রয়োজন।

উত্তর:


2

পাওয়ারশেল, 648 641 625 বাইট

for([uint64]$a=16MB;$a-lt2GB-16mb;$a++){if(($a%16mb)*(($a+1)%16mb)*($a-lt160MB-or$a-gt176MB)*($a-lt1604MB-or$a-ge1608MB)){([ipaddress]$a).IPAddressToString}}
for($a=2GB;$a-lt3GB;$a++){if(($a%64kb)*(($a+1)%64kb)*($a-lt2785152kb-or$a-gt2720mb)*($a-lt2753mb-or$a-gt2754mb)){([ipaddress]$a).IPAddressToString}}
for($a=3221225728;$a-lt3.5GB;$a++){if(($a%256)*(($a+1)%256)*(($a-lt3221225984-or$a-gt3221226240))*(($a-lt3227017984-or$a-gt3151385kb))*(($a-lt3156480kb-or$a-gt3156544kb))*(($a-lt3245184kb-or$a-gt3245312kb))*(($a-lt3247321kb-or$a-gt3325256959))*(($a-lt3405803776-or$a-gt3405804032))){([ipaddress]$a).IPAddressToString}}

সম্পাদনা 1 - আমি দুটি অপারেটর-এর বাকি সমস্ত পাওয়ার গল্ফ করেছি, যা অতিরিক্ত 7 বাইট সংরক্ষণ করেছিল।
2 সম্পাদনা করুন - [uint64]প্রথম ঘোষণায় কাস্ট সরানো হয়েছে $aযার 16 টি বাইট সংরক্ষণ করা অন্য দুটি পুনঃ-ক্যাসেটকে বাদ দিয়েছে।

তিনটি লাইন, ক্লাস এ / ক্লাস বি / ক্লাস সি পাঠযোগ্যতার জন্য আলাদা লাইন হিসাবে বামে। ;-)

কী চলছে তা বোঝার জন্য দুটি মূল বিষয়:

  • পাওয়ারশেলের দুটি অপারেটর রয়েছে KB, MB, GB। উদাহরণস্বরূপ, কোন int হিসাবে 4KBফিরে আসবে 4096। আমরা একাধিক স্থানে কয়েক ডজন বাইট শেভ করতে সহায়তা করি।
  • .NET [ipaddress]শ্রেণি সংখ্যার বাইনারি উপস্থাপনা গ্রহণ করে একটি আইপি ঠিকানা হিসাবে একটি সংখ্যাসূচক মানকে পার্স করার চেষ্টা করবে । আমরা IPAddressToStringআউটপুট জন্য আর্গুমেন্ট সঙ্গে নির্মাণকারী ব্যবহার ।

এই দুটি জিনিসকে সংযুক্ত করে আমরা কেবলমাত্র আইপি ঠিকানাগুলিকে সংখ্যা হিসাবে বিবেচনা করতে এবং সেগুলির মধ্য দিয়ে একটি for()লুপ দিয়ে লুপ করতে সক্ষম। উদাহরণ হিসেবে বলা যায়, বর্গ ভিন্ন সাব-নেট'র প্রথম লুপ থেকে যায় 16MBকাছে 2GB-16MB, বা থেকে 16777216থেকে 2130706432। এর বাইনারি উপস্থাপনা 16777216হ'ল 1000000000000000000000000বা 00000001.00000000.00000000.00000000আমরা যদি এটি 8-বিট খণ্ডে বিভক্ত করি যাতে আমরা সহজেই দেখতে পাই যে 1.0.0.0এটি বিন্দু-দশমিক সংকেতের সাথে মিলে যায়। একইভাবে, 2130706432হিসেবে লেখা যেতে পারে 01111111000000000000000000000000বা 01111111.00000000.00000000.00000000বা 127.0.0.0। এখানে ব্যবহৃত প্রতিটি পূর্ণসংখ্যা বা পাওয়ার-অফ-টু ইন্টিজার এই ফ্যাশনে আইপি অ্যাড্রেস হিসাবে আবার লেখা যেতে পারে।

সুতরাং, প্রতিটি লুপ পুনরাবৃত্তির জন্য, if()পৃথক স্টেটমেন্টগুলি একসাথে গুণ করে আমরা বাদ দেওয়া ঠিকানাগুলিকে আগাছা ছড়িয়ে দেওয়ার জন্য একটি বিবৃতি তৈরি করি। যেহেতু প্রত্যেকের প্রথম বিবৃতিটি ifএকটি পূর্ণসংখ্যা (মডুলো পরীক্ষার জন্য ধন্যবাদ), তাই বুলিয়ান বাকী মানগুলি হয় 0বা 1মিথ্যা / সত্যের জন্য রূপান্তরিত হয় । যদি বিবৃতিগুলির কোনও একটি মিথ্যা হয় তবে পুরো গুণটি পরিণত হবে 0এবং সুতরাং এটি মিথ্যা হবে। সুতরাং, কেবলমাত্র সমস্ত বিবৃতি সত্য হলে, আমরা পার্সিংয়ের ফলাফল আউটপুট করব?

সামান্য সরল:

# Class A
for($a=16MB;$a-lt2GB-16mb;$a++){
  $b=($a%16mb)                     # x.0.0.0
  $b*=(($a+1)%16mb)                # x.255.255.255
  $b*=($a-lt160MB-or$a-gt176MB)    # 10.0.0.0/8
  $b*=($a-lt1604MB-or$a-ge1608MB)  # 100.64.0.0/10
  if($b){([ipaddress]::Parse($a)).IPAddressToString}
}

# Class B
for($a=2GB;$a-lt3GB;$a++){
  $b=($a%64kb)                           # x.y.0.0
  $b*=(($a+1)%64kb)                      # x.y.255.255
  $b*=(($a-lt2785152kb-or$a-gt2720mb))  # 169.254.0.0/16
  $b*=(($a-lt2753mb-or$a-gt2754mb))      # 172.16.0.0/12
  if($b){([ipaddress]::Parse($a)).IPAddressToString}
}

# Class C
for($a=3221225728;$a-lt3.5GB;$a++){
  $b=($a%256)                               # x.y.z.0
  $b*=(($a+1)%256)                          # x.y.z.255
  $b*=(($a-lt3221225984-or$a-gt3221226240)) # 192.0.2.0/24
  $b*=(($a-lt3227017984-or$a-gt3151385kb)) # 192.88.99.0/24
  $b*=(($a-lt3156480kb-or$a-gt3156544kb)) # 192.168.0.0/16
  $b*=(($a-lt3245184kb-or$a-gt3245312kb)) # 198.18.0.0/15
  $b*=(($a-lt3247321kb-or$a-gt3325256959)) # 198.51.100.0/24
  $b*=(($a-lt3405803776-or$a-gt3405804032)) # 203.0.113.0/24
  if($b){([ipaddress]::Parse($a)).IPAddressToString}
}

1

ব্যাচ, 1930 1884 1848 1830 বাইট

@echo off
for /l %%a in (1,1,9)do call:a1 %%a
for /l %%a in (11,1,99)do call:a1 %%a
for /l %%b in (0,1,63)do call:a2 100 %%b
for /l %%b in (128,1,255)do call:a2 100 %%b
for /l %%a in (101,1,126)do call:a1 %%a
for /l %%a in (128,1,168)do call:b1 %%a
for /l %%b in (0,1,253)do call:b2 169 %%b
call:b2 169 255
call:b1 170
call:b1 171
for /l %%b in (0,1,15)do call:b2 172 %%b
for /l %%b in (32,1,255)do call:b2 172 %%b
for /l %%a in (173,1,191)do call:b1 %%a
call:c3 192 0 1
for /l %%c in (3,1,255)do call:c3 192 0 %%c
for /l %%b in (1,1,87)do call:c2 192 %%b
for /l %%c in (0,1,98)do call:c3 192 88 %%c
for /l %%c in (100,1,255)do call:c3 192 88 %%c
for /l %%b in (89,1,167)do call:c2 192 %%b
for /l %%b in (169,1,255)do call:c2 192 %%b
for /l %%a in (193,1,197)do call:c1 %%a
for /l %%b in (0,1,17)do call:c2 198 %%b
for /l %%b in (20,1,50)do call:c2 198 %%b
for /l %%c in (0,1,99)do call:c3 198 51 %%c
for /l %%c in (101,1,255)do call:c3 198 51 %%c
for /l %%b in (52,1,255)do call:c2 198 %%b
for /l %%a in (199,1,202)do call:c1 %%a
for /l %%c in (0,1,112)do call:c3 203 0 %%c
for /l %%c in (114,1,255)do call:c3 203 0 %%c
for /l %%b in (1,1,255)do call:c2 203 %%b
for /l %%a in (204,1,223)do call:c1 %%a
exit/b
:a1
for /l %%b in (0,1,255)do call:a2 %1 %%b
exit/b
:a2
for /l %%c in (0,1,255)do call:a3 %1 %2 %%c
exit/b
:a3
for /l %%d in (0,1,255)do if not %2%3%%d==000 if not %2%3%%d==255255255 echo %1.%2.%3.%%d
exit/b
:b1
for /l %%b in (0,1,255)do call:b2 %1 %%b
exit/b
:b2
for /l %%c in (0,1,255)do call:b3 %1 %2 %%c
exit/b
:b3
for /l %%d in (0,1,255)do if not %3%%d==00 if not %3%%d==255255 echo %1.%2.%3.%%d
exit/b
:c1
for /l %%b in (0,1,255)do call:c2 %1 %%b
exit/b
:c2
for /l %%c in (0,1,255)do call:c3 %1 %2 %%c
exit/b
:c3
for /l %%d in (1,1,254)do echo %1.%2.%3.%%d

সম্পাদনা করুন: অপ্রয়োজনীয় জায়গাগুলি সরিয়ে 46 82 বাইট সংরক্ষণ করা হয়েছে। exit/bপরিবর্তে ব্যবহার করে 18 বাইট সংরক্ষণ করা হয়েছে goto:eof


1
আমি 1872 বাইট গণনা। আপনি টেকনিক্যালি প্রয়োজন হবে না @echo offপাশাপাশি।
অ্যাডিসন ক্রম্প

@ ফ্ল্যাগএএসস্প্যাম সম্ভবত সিআরএস; নোটপ্যাড তাদের সংরক্ষণ করতে পছন্দ করে।
নীল

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