در تیم زیرساخت دیجیکالا، میکروسرویسهای مختلفی در حال پدید آمدن هستند. برخی از این میکروسرویسها قرار است تنها برای کاربران برخی از کشورها در دسترس باشند. سالار که وظیفهی مدیریت درخواستهای ورودی از کشورهای مختلف را برعهده دارد، لیستی از بازههای آیپیهای کشورهای مدنظرش جمعآوری کرده است. او اکنون از شما میخواهد اسکریپتی برای او بنویسید که با استفاده از آن بتوان درخواستهای ورودی از کشورهای مختلف را مسدود یا آزاد کرد.
جزئیات پروژه
پروژهی اولیه را از این لینک دانلود کنید.
ساختار فایلهای پروژه بهصورت زیر است:
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
را آپلود کنید.
ارسال پاسخ برای این سؤال