إدارة الشبكات ومراقبة تدفق بيانات الحركة بين الأنظمة يبدو مخيفًا. حسنًا، ليس ما لم تعرف كيف تستخدم أداة السطر الأمري Netcat.
Netcat هي أداة سطر أوامر يمكنك استخدامها لأغراض مختلفة، مثل فحص المنافذ، ونقل الملفات، وإنشاء خادم ويب بحد أدنى لاختبار أنشطة الاتصال. وفي هذا البرنامج التعليمي، ستتعلم كيفية الاستفادة من Netcat بينما تتناول بعض أكثر الحالات الاستخدام الشائعة لـ Netcat.
هل أنت مستعد؟ استمر في القراءة وطور مهارات الشبكات الخاصة بك إلى مستوى جديد!
الشروط المسبقة
سيكون هذا البرنامج التعليمي عرضًا تطبيقيًا. إذا كنت ترغب في متابعة، تأكد من أن لديك ما يلي.
- جهازي Linux: يعمل أحدهما (ubuntu1) كمضيف استقبال، والآخر (ubuntu2) كمضيف إرسال – يستخدم هذا البرنامج التعليمي Ubuntu 20.04 لكل من الجهازين.
فحص المنافذ المفتوحة
المنافذ هي البوابات التي تسمح لحركة المرور عبر الشبكة بالدخول والخروج من الجهاز. عندما تكون المنفذ مغلقًا، لا يوجد خدمة تستمع على هذا المنفذ، ولا يمكن لأي حركة مرور العبور. ولكن إذا كان المنفذ مفتوحًا، فإن شبكتك عُرضة للهجمات.
إذا كنت ترغب في التحقق مما إذا كان منفذ معين مفتوحًا على جهازٍ ما للبحث عن أي ثغرات أمنية، فإن Netcat مؤهل لهذه المهمة. كمختبر أمان، يتعين عليك معرفة المنافذ المفتوحة لتنفيذ هجومك. مهما كانت الأسباب، فإن فحص المنافذ المفتوحة هو حاجة شائعة.
الصيغة الأساسية لفحص المنافذ باستخدام Netcat هي كالتالي حيث:
host
– هو عنوان IP أو اسم الجهاز الذي تريد فحصه.startport
– هو رقم المنفذ البدئي.endport
– هو رقم المنفذ النهائي.
لأمر netcat يوجد اختصار nc، الذي يأتي في متناول اليد لتقصير الأوامر. ولكن هذا البرنامج التعليمي يستخدم netcat لوثائق صحيحة.
SSH إلى الجهاز الذي تريد إرسال البيانات إليه (ubuntu2) وقم بتشغيل الأمر التالي لفحص المنافذ المفتوحة بين المنافذ 1-100
.
خلال هذا البرنامج التعليمي، قم بتغيير 149.28.86.131 بعنوان IP الخاص بالجهاز الذي تريد إرسال البيانات إليه.
في معظم الحالات، فإن نطاق المنافذ 1-100
كافٍ. معظم الخدمات تستخدم أرقام منافذ افتراضية تقع عمومًا في هذا النطاق، مثل 22
لبروتوكول SSH، 80
لبروتوكول HTTP، وما إلى ذلك.
القائمة أدناه تشرح كل العلامات التي تتحكم في سلوك فحص المنفذ:
-z
(وضع إدخال/إخراج صفر) – لن يقوم Netcat بقراءة أو كتابة إلى اتصال الشبكة. تجعل هذه الخيارات عملية الفحص أسرع.-n
– يخبر Netcat بتعطيل البحث عن DNS لتجنب التأخير.-v
– يجعل Netcat يظهر جميع عمليات فحص المنافذ بالتفصيل.
يمكنك أن ترى أدناه أن الاتصال بالمنفذ 22 (SSH) نجح، ولكن جميع المنافذ الأخرى فشلت.

نظرًا لأن الأمر netcat
يقوم بسرد جميع المنافذ المفحوصة، تحصل على الكثير من المعلومات وبعضها غير ضروري. في هذه الحالة، قم بتشغيل الأمر أدناه، موجهًا أمر grep
. يقوم هذا الأمر بتصفية فقط الأبواب المفتوحة برسالة “نجحت!”
في النهاية، كما هو موضح أدناه.
أدناه، يمكنك أن ترى أن المنفذ 22 مفتوح لاتصال SSH كما هو متوقع.

إرسال الملفات بشكل آمن بين الأجهزة
بجانب فحص المنافذ، يجعل Netcat من الممكن نقل الملفات بشكل آمن بين جهازين. يستخدم Netcat بروتوكول TCP لنقل الملفات، والذي هو أكثر موثوقية من UDP.
الصيغة الأساسية لإرسال ملف باستخدام Netcat هي كما يلي:
لإرسال الملفات من جهازك إلى جهاز آخر:
1. قم بتشغيل الأمر أدناه للبدء في الاستماع على المنفذ 4444 على الجهاز الذي يستلم (ubuntu1).
هذا الأمر لا يُظهر أي إخراج، ولكن الخيارات أدناه تؤثر على كيفية تعيين الأمر لمنفذ الاستماع:
-l
– يخبرnetcat
بالاستماع لاتصال وارد على المنفذ TCP المحدد. يمكن أن يكون المنفذ أي رقم ترغب فيه، ولكن تأكد من أن خدمات أخرى لا تستخدم المنفذ المفضل لديك.
> - يخبر netcat بتوجيه جميع البيانات الواردة إلى ملف على المسار المحدد (ata_file).
يمكن للمستخدم الجذر فقط أن يرتبط بالمنافذ أقل من 1000، لذا يجب عليك اختيار منفذ أكبر من 1000 كمستخدم غير جذر. إذا حاولت استخدام رقم المنفذ أقل من 1000 كمستخدم غير جذر، ستحصل على الخطأ التالي.

2. على الجهاز الذي يقوم بالإرسال (ubuntu2)، قم بتشغيل الأمر echo التالي، الذي لا يُظهر أي إخراج ولكن ينشئ ملفًا يسمى ata_file بمحتوى Hello from ATA.
3. الآن، قم بتشغيل أمر netcat أدناه لإرسال ata_file إلى الجهاز الذي يستقبل (ubuntu1). تأكد من استخدام نفس رقم المنفذ على الجهاز الذي يستقبل (4444) كما في الجهاز الذي يرسل.
لا يُظهر هذا الأمر أي إخراج، ولكن الخيار يخبر netcat بأن يأخذ الإدخال من الملف المحدد.
4. أخيرًا، انتقل إلى الجهاز الذي يستقبل (ubuntu1) وقم بتشغيل أمر cat أدناه لفحص محتوى ملف ata_file.
يمكنك رؤية رسالة Hello from ATA أدناه، مما يشير إلى نجاح عملية النقل.

إرسال الدلائل إلى جهاز آخر
حتى الآن، قمت بإرسال ملف واحد بنجاح من جهاز إلى آخر. ولكن ماذا لو أردت إرسال دليل بأكمله مع كل دلائله وملفاته بدلاً من ذلك؟ يمكن لـ Netcat أن يرسل الدلائل أيضًا!
فرضًا أن لديك دليل نسخ احتياطي يسمى apache_backup على الجهاز الإرسال (ubuntu2). ستحتاج أولاً إلى ضغط الدليل، ثم إرساله وفك ضغطه على الجهاز الواستقبال (ubuntu1).
1. على الجهاز الواستقبال (ubuntu1)، قم بتشغيل الأمر التالي لإنشاء دليل جديد يسمى apache_backup والانتقال (cd) إلى هذا الدليل.

2. بعد ذلك، قم بتشغيل الأمر أدناه للبدء في الاستماع على المنفذ 4444 واستخراج الملفات المضغوطة التي يرسلها الجهاز الإرسال (ubuntu2) إلى الجهاز الواستقبال (ubuntu1).
هذا الأمر لا يظهر ناتجًا، ولكن خيارات tar xf – تأخذ المدخلات من Netcat (المدخلات القياسية) وتستخرج جميع الملفات إلى الدليل الحالي.
3. على الجهاز الإرسال (ubuntu2)، قم بتشغيل الأوامر التالية لإنشاء دليل (apache_backup)، وبعض ملفات النص، وإرسالها إلى الجهاز الواستقبال (ubuntu1).
هذه الأوامر لا تظهر ناتجًا، ولكن ستتحقق من نجاح النقل في الخطوة التالية.
4. في النهاية، انتقل إلى الجهاز الواستقبال (ubuntu1)، اضغط على Ctrl+C لإيقاف الاستماع على المنفذ 4444، وقم بتشغيل الأمر ls لعرض قائمة الملفات داخل apache_backup.
كما يمكنك رؤية أدناه، تم نقل ملفات دليل apache_backup بنجاح إلى دليل apache_backup على الجهاز الواستقبال.

نقل القرص أو القسم بأكمله إلى جهاز استقبال آخر
إرسال جزءك أو قرصك بأكمله إلى مضيف آخر قد يبدو جريئًا، لكن هذه المهمة قابلة للتحقيق بعيدًا عن إرسال الملفات والمجلدات. هذا الإنجاز يأتي بما فيه الكفاية، خاصة إذا كنت بحاجة إلى نسخة احتياطية من قرصك بأكمله قبل اتخاذ إجراءات جذرية، مثل نقل أو حذف كميات كبيرة من الملفات.
1. قم بتشغيل الأمر على المضيف الواستقبالي (أوبونتو 1) للبدء في الاستماع على منفذ 4444. هذا الأمر لا يوفر إخراجًا ولكنه يفك الضغط عن جميع البيانات الواردة (bzip2 -d | dd) إلى / dev / sdb.
/ dev / sdb هو القرص الثاني الصلب على الجهاز. ولكن في هذه الحالة ، / dev / sdb هو قرص صلب فارغ مرتبط بهذا الجهاز لهذا البرنامج التعليمي.
2. على المضيف الواستقبالي (أوبونتو 2) ، قم بتشغيل الأمر التالي للعثور على جميع الأقراص والأقسام على جهازك.
كما يمكنك رؤية أدناه ، / dev / vda1 / هو القسم الجذري للمضيف الإرسال في هذا البرنامج التعليمي. قد يكون الإخراج الخاص بك مختلفًا اعتمادًا على تكوين الجهاز الخاص بك.

3. قم بتشغيل الأمر التالي على المضيف الإرسالي (أوبونتو 2) ، الذي لا يحتوي على إخراج ، ولكن يرسل القسم / dev / vda1 إلى المضيف الواستقبالي (أوبونتو 1) عبر منفذ 4444.
يستغرق ضغط القسم وإرساله إلى المضيف الواستقبالي وقتًا طويلاً ، اعتمادًا على حجم القسم.
4. بمجرد اكتمال العملية ، انتقل إلى المضيف الواستقبالي (أوبونتو 1) ، وسترى الناتج أدناه.
من المتوقع حدوث خطأ “لا توجد مساحة متاحة على الجهاز” لأن /dev/vda1 ربما يكون أكبر من /dev/sdb. لكنك تفهم الفكرة! يمكنك استخدام Netcat لإرسال القرص الصلب بأكمله أو القسم إلى جهاز آخر.

5. في النهاية، قم بتشغيل الأوامر على الجهاز المستلم (ubuntu1) لتركيب القسم /dev/vda1 وعرض جميع الملفات في القسم.
كما يمكنك رؤية أدناه، تم نقل جميع الملفات والمجلدات من /dev/vda1 بنجاح إلى /dev/sdb.

إنشاء خادم ويب بسيط
يمكن أن يكون من المتعب تكوين خادم ويب مكتمل مثل Apache أو NGINX فقط لتشخيص مشكلة خادم الويب. بدلاً من ذلك، قم بإنشاء خادم ويب بسيط باستخدام Netcat لتحديد مشكلات خادم الويب بسرعة.
لإنشاء خادم ويب بسيط:
1. انتقل إلى الجهاز المستلم وقم بتشغيل الأوامر التالية لإنشاء دليل رئيسي (nc-webserver-docroot) للخادم الويب ونص برنامج نصي (httpresponse.sh) يُولِد الاستجابة HTTP.

2. بعد ذلك، أنشئ ملف index.html في الدليل /root/nc-webserver-docroot/ باستخدام محرر النص الذي تفضله واملأ الملف بالشفرة التالية. يحتوي ملف HTML هذا على المحتويات التي سيقدمها خادم الويب Netcat.
3. أنشئ ملف برنامج نصي يسمى httpresponse.sh في الدليل /root/nc-webserver-docroot/ واملأه بالشفرة التالية.
هذا النص يقوم بإرجاع محتويات ملف /root/nc-webserver-docroot/index.html كاستجابة HTTP إلى أي عميل يرسل طلبًا إلى خادم الويب Netcat الخاص بك.
4. الآن، قم بتشغيل أمر chmod أدناه، الذي لا يعطي إخراجًا ولكن يجعل ملف httpresponse.sh قابلًا للتنفيذ (+x).
5. قم بتشغيل الأمر ncat أدناه لبدء خادم الويب Netcat على منفذ 7777.
تأكد من استبدال المنفذ 7777 برقم المنفذ الذي تختاره، والذي لا يُستخدم من قبل أي خدمة أخرى على نظامك.
الخيارات التالية تؤثر على سلوك خادم الويب Netcat:
-l
– يخبر Ncat بالاستماع لاتصال وارد.
-v
– يُمكّن وضع التفاصيل لعرض جميع طلبات HTTP الواردة في الطرفية الخاصة بك.
-c - يُحدد المسار إلى النص البرمجي httpresponse.sh الذي يُولّد الاستجابات HTTP.
- -keep-open – يُبقي مستمع Ncat مفتوحًا حتى بعد إغلاق الاتصال الأول. هذا الخيار مفيد إذا كنت تختبر خادم الويب الخاص بك مع عملاء متعددين.
سترى الإخراج التالي بمجرد تشغيل خادم الويب Netcat والاستماع على منفذ 7777 على جميع الواجهات الشبكية المتاحة.

6. الآن، افتح نافذة الأوامر الأخرى وقم بتشغيل الأمر التالي لاختبار خادم الويب Netcat الخاص بك (http://localhost:7777).
المخرجات أدناه تظهر أن خادم الويب Netcat يعمل كما هو متوقع ويمكنه إرجاع محتويات الملف /root/nc-webserver-docroot/index.html كاستجابة HTTP.

7. وأخيرًا، انتقل إلى النافذة حيث يعمل خادم الويب Netcat. سترى أن خادم الويب Netcat قد تلقى ومعالجة الطلب HTTP من عميل curl.
تهانينا! لقد قمت بإنشاء خادم ويب Netcat أدنى لاختبار توصيل الشبكة بنجاح!

الاستنتاج
في هذا البرنامج التعليمي، تعلمت كيفية استخدام Netcat لرفع مهارات الشبكات وتصحيح الأخطاء الخاصة بك. لقد قمت بفحص المنافذ المفتوحة، ونقل الملفات، وإنشاء خادم ويب أدنى. وفي هذه المرحلة، يمكنك الآن حل العديد من مشاكل الشبكات العملية باستخدام هذه الأداة القوية للشبكات!
بهذه المعرفة الجديدة، لماذا لا ترفع مهاراتك في الشبكات أكثر وتصبح مستخدمًا قويًا في أمان المعلومات؟