বাশ-এর ​​হাজার হাজার সিআইডিআর / নেটমাস্ক রেঞ্জগুলিতে আইপি হোস্ট অ্যাড্রেসের একটি গণনা দ্রুত এবং দক্ষতার সাথে পাওয়ার কী কোনও উপায় আছে?


4

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

আইপিসেট এন্ট্রি ফর্ম্যাটটি ধারাবাহিকভাবে এর মতো:

123.456.0.0/16 timeout 86400

সুতরাং আমি যে লাইনে timeoutসিআইডিআর / নেটমাস্ক রেঞ্জগুলিতে প্রবেশের অন্তর্ভুক্ত রয়েছে তাতে কাজ করতে মানগুলি পেতে পারি।

উদাহরণস্বরূপ, যদি আমি ipset -L -n > ipset-20181228.txtনামের পাঠ্য ফাইলে আইপিসেট আউটপুট (মাধ্যমে ) সংরক্ষণ করি ipset-20181228.txtএবং তারপরে grepএবং এর wc -lমতো একটি সংমিশ্রণ চালাচ্ছি :

grep  "timeout" ipset-20181228.txt  | wc -l

আমি 39,000+ আইটেমের একটি গণনা পাই যা 39,000+ সিআইডিআর / নেটমাস্ক রেঞ্জের সমান। তবে এটি (অবশ্যই) কেবল সিআইডিআর / নেটমাস্কের রেঞ্জ গণনা করা এবং সেই ব্যাপ্তিতে আইপি হোস্ট ঠিকানাগুলির সম্পূর্ণ গণনা নয়।

আমি pripsসিআইডিআর / নেটমাস্ক রেঞ্জের সাথে কেবলমাত্র আইটেমগুলি সরিয়ে ফেলতে গ্রেপ দিয়ে (যা ব্যাশের প্রকৃত আইপি অ্যাড্রেসগুলিতে সিআইডিআর / নেটমাস্কের মানগুলি প্রসারিত করে) ব্যবহার করার চেষ্টা করেছি :

grep -oE '(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\/([0-9]{1,2})' ipset-20181228.txt | awk 'NF { system( "prips " $0)  }' | wc -l

এবং আমার 2018 এর ম্যাকবুক এয়ারে 20 থেকে 30 মিনিটের (!!!) পরে (ভক্তরা লাথি মারছে), আমার প্রাপ্ত গণনা ছিল 736,000,000+ যা আমি যাচ্ছি ... তবে 20 থেকে 30 মিনিটের পথ বেশ দীর্ঘ । আমি এটিকে যতটা সম্ভব স্ক্রিপ্টযোগ্য এবং অ-প্রবেশমূলক হতে চাই এবং সংস্থান না খেয়ে প্রোডাকশন সার্ভারে চালানোর মতো কোনও কমান্ডকে বিশ্বাস করতে পারি না; আমার অর্থ এটি আমার স্থানীয় 2018 ম্যাকবুক এয়ার ডেভলপমেন্ট সেটআপে কীভাবে আচরণ করে তা দেখুন।

কেবল সিআইডিআর / নেটমাস্ক মানের উপর ভিত্তি করে কেবল সিআইডিআর / নেটমাস্ক রেঞ্জ গণনা গণনা করার কোনও উপায় আছে কি? আমি আশা করছি যে কেবলমাত্র কমান্ড লাইন সরঞ্জাম রয়েছে existing বা বিদ্যমান সরঞ্জামগুলিতে যে বিকল্পগুলি আমি ব্যবহার করছি সেগুলির মধ্যে option যে আমি যে সাহায্য করতে পারি তা সম্পর্কে অসচেতন।


আপনি কোন রূপান্তর চান? অপশন এ 1.2.3.0/24থেকে 1.2.3.0-1.2.3.255অপশন বি 1.2.3.0-1.2.3.255থেকে 1.2.3.0/24। এনম্যাপ, ট্রেস্রোয়েটের কিছু বৈশিষ্ট্য রয়েছে।
বিশ্বাপ্রিয়ো

1
পুনঃটুইট করেছেন এমনকি আপনি প্রশ্নটি পড়েছেন? আমি কেবল সিআইডিআর / নেটমাস্ক নোটেশনের ভিত্তিতে আইপি ঠিকানাগুলির একটি গণনা পেতে বলছি। পরিসর স্বরলিপি এক ফর্ম থেকে অন্য রূপান্তর না।
জ্যাকগল্ড

2
যদি আমি সঠিকভাবে বুঝতে পারি তবে আপনি জানতে চান যে প্রদত্ত আইপি / মাস্ক জুটিতে কতগুলি হোস্ট রয়েছে। হোস্ট নম্বরটি 2^(32-mask)-2। মুখোশটি নেট বিটগুলি উপস্থাপন করে, তাই অন্য অংশটি হোস্ট বিটের প্রতিনিধিত্ব করে। -2নেট ঠিকানা এবং সম্প্রচার আইপিএস জন্য। আপনি যদি ipcalcইনস্টল করে থাকেন তবে এই তথ্যগুলি দেখুন। (যদি আমি আপনার প্রশ্নটি ভুল বুঝি তবে আমাকে ক্ষমা করুন)
পাওলো

1
@ পাওলো: ২ টি বিয়োগ করবেন না; ধরে নিবেন না যে প্রতিটি পরিসীমা সরাসরি একটি সাবনেটের সাথে সম্পর্কিত। রুট এবং ফিল্টার তালিকাগুলির দৈহিক বিন্যাসের সাথে কোনও যোগাযোগ নেই - একটি এন্ট্রি হয়ত সাবনেটের কেবলমাত্র অংশের সাথে মেলে, বা একসাথে একাধিক সাবনেটগুলি কভার করতে পারে, এমনকি এমন নেটওয়ার্কগুলিতেও প্রযোজ্য পারে যা "সাবনেট" ধারণাটি প্রথম স্থানে নেই (যেমন পয়েন্ট-টু -পয়েন্ট লিঙ্ক)। এবং সত্যই, কোনও ঠিকানা কোনও হোস্টের প্রতিনিধিত্ব করে কিনা তা ফিল্টারিংয়ের ক্ষেত্রেও প্রাসঙ্গিক নয়। প্রতিটি উপসর্গের ঠিক 2^(32-mask)ঠিকানা রয়েছে এবং এটিই।
মাধ্যাকর্ষণ

@ গ্র্যাটিটি আমি আপনার বক্তব্যটি দেখতে পাচ্ছি, আমি মনে করি আমি একটি সাবনেট রেঞ্জের ধারণায় আটকে ছিলাম। প্রশ্নটি থেকে এই ব্যাপ্তিটি আপনি যেভাবে বলেছিলেন ঠিক তেমন আইপসের ব্যাপ্তি হতে পারে। স্পষ্ট করার জন্য ধন্যবাদ। আমি সাবস্ক্রাইব 2^(32-mask)
পাওলো

উত্তর:


2

যদি আপনার grepকমান্ড লাইনের আউটপুট দেয় 123.456.0.0/16তবে আপনাকে সেগুলি পাইপ করা দরকার

awk -F / '{ count[$2]++ } END { for (mask in count) total+=count[mask]*2^(32-mask); print total }'

কমান্ডটি কেবল মাস্কগুলি বের করে (অর্থাত্‍ পরে /) এবং প্রতিটি মাস্কের উপস্থিতি গণনা করে। শেষে হোস্টগুলির সংখ্যা প্রতিটি মুখোশের মুখোশটির জন্য গণনা করা হয় ( 2^(32-mask)), সংঘটন সংখ্যার দ্বারা গুণিত এবং সংমিশ্রণ করা হয়।

নোট:

  • কোনও স্যানিটি পরীক্ষা করা হয় না। যেমন ইনপুট যেমন 1.2.3.4/40গ্রহণ করা হবে, অ-পূর্ণসংখ্যার আউটপুট গণনা করা হবে। grepপ্রয়োজনে আপনার প্রাথমিক ফিল্টারটি উন্নত করুন ।
  • প্রতিটি পরিসীমা স্বাধীনভাবে মোট সংখ্যায় অবদান রাখে। যদি আপনার ব্যাপ্তিগুলি ওভারল্যাপ হয় তবে আপনি একটি স্ফীত ফলাফল পাবেন (আমি মনে করি আপনার সাথে এর চেষ্টা এর pripsচেয়ে ভাল ছিল না)।

এটি দুর্দান্ত। এটি নিম্নলিখিত হিসাবে চালানো বেশ দ্রুত কাজ করে এবং আমি grep -oE '(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\/([0-9]{1,2})' ipset-*.txt | awk -F / '{ count[$2]++ } END { for (mask in count) total+=count[mask]*2^(32-mask); print total }'
এটির

0

আমি ভেবেছিলাম যে এর মতো কিছু কাজ করবে যেহেতু মূল পোস্টারগুলি লাইনগুলি থেকে সিআইডিআর পেতে গ্রেপ চলছে timeout:

awk -F'[ /]' '/timeout/ {hosts+=2^(32-$2)};ENDFILE{print "Hosts number in "FILENAME": "hosts;total+=hosts;hosts=0};END {print "Total: "total}' ipset*.txt

সম্পাদনা- awkউপরের প্রোগ্রামটি কেবলমাত্র দিয়ে চলে GNU awkENDFILEএকটি জিএনইউ এক্সটেনশন।

আমি অনুমান করি এবং বিভাগটি যদি প্রধান প্রোগ্রাম বিভাগের অংশ হয় তবে তা BSD awkউপেক্ষা করে ENDFILEচালিত করে ।

এটি GNU এবং BSD awk এর সাথে সামঞ্জস্যপূর্ণ।

awk -F'[ /]' '{if (filename != FILENAME) hosts=0};/timeout/ {hosts+=2^(32-$2)};{filename=FILENAME;file_total[filename]=hosts};END{for (i in file_total) {print "Hosts number in "i": "file_total[i];total+=file_total[i]};{print "Total: "total};}' ipset*.txt

আপনার সংশোধিত স্ক্রিপ্টটি ম্যাকোজে কাজ করে, তবে আমি আগে যেমন ব্যাখ্যা করেছি যে এটি এখন ম্যাকস এবং লিনাক্স হিসাবে গণনার চেয়ে মারাত্মকভাবে রয়েছে: আমি প্রত্যাশিত 6 736,০০,০০০+ এর পরিবর্তে আপনার স্ক্রিপ্টটি ব্যবহার করে আমি একটি হোস্ট সংখ্যা পাচ্ছি + আমি একটি লাইভ নমুনা পরীক্ষায় ব্যবহার করছি গ্রহণযোগ্য উত্তর পাশাপাশি ফাইল prips। দুঃখিত, চেষ্টা করার জন্য ধন্যবাদ তবে এটি কম কথা বলে কাজ করছে না।
জেকগল্ড

1
@ জেকগোল্ড ঠিক আছে, মোটেও সমস্যা নয়। সম্ভবত আমি এটি সঠিকভাবে ফিল্টার করতে আউটপুট বুঝতে পারি নি। এছাড়াও আমি ইনস্টল করার সহজ উপায় pripsএবং এটি কীভাবে কাজ করে এবং এটি আউটপুট তা একবার দেখে নিতে পারি না। যাইহোক, awkকোনও জিএনইউ এক্সটেনশন ছাড়াই প্রতিবেদনটি পাওয়ার পক্ষে অনুশীলনটি মূল্যবান ।
পাওলো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.