یک اسکریپت بش بنویسید که با استفاده از netcat به‌عنوان سرور TCP روی پورت 12345 گوش دهد، پیام‌های دریافتی را همراه با مهرزمان (timestamp) در فایل لاگ ذخیره کند و همان پیام را به کلاینت بازگرداند (echo).

4.0 بازدید آخرین ویرایش در 221 روز قبل ساعت 01:25

0.0

برای حل این مسئله می‌توانید از ابزار netcat (nc یا ncat) برای گوش کردن روی پورت استفاده کنید (گزینه‌های متداول: -l برای listen، -k برای نگه داشتن سرویس برای چند اتصال و -p برای مشخص کردن پورت بسته به نسخه). برای هر پیام دریافتی از read در یک حلقه استفاده کنید، با date مهرزمان بسازید و با عملگر >> در فایل لاگ بنویسید و سپس همان خط را به خروجی برگردانید تا به کلاینت ارسال شود. نکات: از IFS= read -r برای خواندن خطوط با فضای سفید محافظت‌شده استفاده کنید، قبل از اجرای اسکریپت وجود netcat و دسترسی به پورت را بررسی کنید و رفتار گزینه‌ها را در نسخه‌ی netcat سیستم خود با man nc بازبینی کنید.

توسط پژوهشگر در 221 روز قبل ساعت 01:25
دسته بندی ها: Bash Scripting Bash Scripting for beginner
reyhaneh در 221 روز قبل ساعت 13:22

نکتهٔ مهم اینکه رفتار گزینه‌های nc برای نسخه‌های مختلف متفاوت است؛ برخی نسخه‌ها فقط با -l یا -k کار می‌کنند و در نتیجه لازم است نسخهٔ nc سیستم خود را با man nc بررسی کنید. برای پایداری سرویس طولانی‌مدت، استفاده از حلقه‌ای که هر اتصال را جداگانه پردازش می‌کند و لاگ‌برداری با timestamp را در فایل انجام می‌دهد بهتر است و شاید بخواهید سرویس را به عنوان یک daemon یا systemd واحد راه‌اندازی کنید. همچنین هنگام خواندن خطوط از ورودی از IFS= read -r استفاده کنید تا فضاهای داخلی خط به درستی حفظ شوند و از بروز مشکلات با newlineها جلوگیری شود. در نهایت مطمئن شوید که کلاینت پیام را به‌صورت line-by-line دریافت کند تا همان خط به کلاینت بازگردد و با newline پایان یابد.

گزارش

1 پاسخ

جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من

در حال بارگیری...
ورود به حساب کاربری