در تیم زیرساخت دیجیکالا، میکروسرویسهای مختلفی در حال پدید آمدن هستند. برخی از این میکروسرویسها قرار است تنها برای کاربران برخی از کشورها در دسترس باشند. سالار که وظیفهی مدیریت درخواستهای ورودی از کشورهای مختلف را برعهده دارد، لیستی از بازههای آیپیهای کشورهای مدنظرش جمعآوری کرده است. او اکنون از شما میخواهد اسکریپتی برای او بنویسید که با استفاده از آن بتوان درخواستهای ورودی از کشورهای مختلف را مسدود یا آزاد کرد.
جزئیات پروژه
پروژهی اولیه را از این لینک دانلود کنید.
ساختار فایلهای پروژه بهصورت زیر است:
country-manager
├── ip_lists
│ ├── AG.txt
│ ├── CC.txt
│ └── IR.txt
└── country_manager.sh
اسکریپت country_manager.sh را مطابق توضیحات زیر پیادهسازی کنید:
- نحوهی اجرای اسکریپت بهصورت
./country_manager.sh command ip_list_filepathاست. مثال:
./country_manager.sh block ./ip_lists/CC.txt
- اگر تعداد آرگومانهای ورودی اسکریپت کمتر از ۲ تا (یکی برای
commandو یکی برایip_list_filepath) بود، اسکریپت باید عبارتnot enough argumentsرا چاپ کند و متوقف شود. - اگر مقدار
commandبرابر باblockیاunblockنبود، اسکریپت باید عبارتinvalid commandرا چاپ کند و متوقف شود. - اگر فایلی که مسیر آن بهعنوان آرگومان دوم وارد میشود وجود نداشت، اسکریپت باید عبارت
ip list file not foundرا چاپ کند و متوقف شود. - اگر مقدار
commandبرابر باblockباشد، اسکریپت باید لیست بازههای آیپی موجود در فایل را دریافت کند و درخواستهای ورودی مربوط به این آیپیها را بهازای همهی پروتکلها و پورتهاDROPکند. اگر rule مربوط بهACCEPTکردن این درخواستها از قبل موجود بود، اسکریپت باید آنها را حذف کند. - اگر مقدار
commandبرابر باunblockباشد، اسکریپت باید لیست بازههای آیپی موجود در فایل را دریافت کند و درخواستهای ورودی مربوط به این آیپیها را بهازای همهی پروتکلها و پورتهاACCEPTکند. اگر rule مربوط بهDROPکردن این درخواستها از قبل موجود بود، اسکریپت باید آنها را حذف کند.
نکات
- عملیات مسدودسازی و آزادسازی درخواستها باید با استفاده از
iptablesانجام شود. - داوری این سؤال کمی بیشتر از سایر سؤالات طول میکشد.
- بازههای آیپی طبق نگارش CIDR هستند.
- تضمین میشود که هیچ rule ای خارج از اسکریپت اضافه نمیشود.
آنچه باید آپلود کنید
پس از پیادهسازی موارد خواستهشده، فایل country_manager.sh را آپلود کنید.
ارسال پاسخ برای این سؤال