كيفية استخدام Netcat ورفع مهاراتك في مجال الشبكات!

إدارة الشبكات ومراقبة تدفق بيانات الحركة بين الأنظمة يبدو مخيفًا. حسنًا، ليس ما لم تعرف كيف تستخدم أداة السطر الأمري Netcat.

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

هل أنت مستعد؟ استمر في القراءة وطور مهارات الشبكات الخاصة بك إلى مستوى جديد!

الشروط المسبقة

سيكون هذا البرنامج التعليمي عرضًا تطبيقيًا. إذا كنت ترغب في متابعة، تأكد من أن لديك ما يلي.

  • جهازي Linux: يعمل أحدهما (ubuntu1) كمضيف استقبال، والآخر (ubuntu2) كمضيف إرسال – يستخدم هذا البرنامج التعليمي Ubuntu 20.04 لكل من الجهازين.
  • Netcat و bzip2 مثبتة على كلا الجهازين.

فحص المنافذ المفتوحة

المنافذ هي البوابات التي تسمح لحركة المرور عبر الشبكة بالدخول والخروج من الجهاز. عندما تكون المنفذ مغلقًا، لا يوجد خدمة تستمع على هذا المنفذ، ولا يمكن لأي حركة مرور العبور. ولكن إذا كان المنفذ مفتوحًا، فإن شبكتك عُرضة للهجمات.

إذا كنت ترغب في التحقق مما إذا كان منفذ معين مفتوحًا على جهازٍ ما للبحث عن أي ثغرات أمنية، فإن Netcat مؤهل لهذه المهمة. كمختبر أمان، يتعين عليك معرفة المنافذ المفتوحة لتنفيذ هجومك. مهما كانت الأسباب، فإن فحص المنافذ المفتوحة هو حاجة شائعة.

الصيغة الأساسية لفحص المنافذ باستخدام Netcat هي كالتالي حيث:

  • host – هو عنوان IP أو اسم الجهاز الذي تريد فحصه.
  • startport – هو رقم المنفذ البدئي.
  • endport – هو رقم المنفذ النهائي.
netcat options host 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 يظهر جميع عمليات فحص المنافذ بالتفصيل.
netcat -z -n -v 149.28.86.131 1-100

يمكنك أن ترى أدناه أن الاتصال بالمنفذ 22 (SSH) نجح، ولكن جميع المنافذ الأخرى فشلت.

How to Use Netcat : Scanning for Open Ports

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

netcat -z -n -v 149.28.86.131 1-100 2>&1 | grep succeeded

أدناه، يمكنك أن ترى أن المنفذ 22 مفتوح لاتصال SSH كما هو متوقع.

Filtering the Successful Port Connection

إرسال الملفات بشكل آمن بين الأجهزة

بجانب فحص المنافذ، يجعل Netcat من الممكن نقل الملفات بشكل آمن بين جهازين. يستخدم Netcat بروتوكول TCP لنقل الملفات، والذي هو أكثر موثوقية من UDP.

الصيغة الأساسية لإرسال ملف باستخدام Netcat هي كما يلي:

netcat options host port filename

لإرسال الملفات من جهازك إلى جهاز آخر:

1. قم بتشغيل الأمر أدناه للبدء في الاستماع على المنفذ 4444 على الجهاز الذي يستلم (ubuntu1).

هذا الأمر لا يُظهر أي إخراج، ولكن الخيارات أدناه تؤثر على كيفية تعيين الأمر لمنفذ الاستماع:

  • -l – يخبر netcat بالاستماع لاتصال وارد على المنفذ TCP المحدد. يمكن أن يكون المنفذ أي رقم ترغب فيه، ولكن تأكد من أن خدمات أخرى لا تستخدم المنفذ المفضل لديك.
  • > - يخبر netcat بتوجيه جميع البيانات الواردة إلى ملف على المسار المحدد (ata_file).
netcat -l 4444 > ata_file

يمكن للمستخدم الجذر فقط أن يرتبط بالمنافذ أقل من 1000، لذا يجب عليك اختيار منفذ أكبر من 1000 كمستخدم غير جذر. إذا حاولت استخدام رقم المنفذ أقل من 1000 كمستخدم غير جذر، ستحصل على الخطأ التالي.

Getting “Permission denied” Error When Using Port Lower Than 1000

2. على الجهاز الذي يقوم بالإرسال (ubuntu2)، قم بتشغيل الأمر echo التالي، الذي لا يُظهر أي إخراج ولكن ينشئ ملفًا يسمى ata_file بمحتوى Hello from ATA.

echo "Hello from ATA" > ata_file

3. الآن، قم بتشغيل أمر netcat أدناه لإرسال ata_file إلى الجهاز الذي يستقبل (ubuntu1). تأكد من استخدام نفس رقم المنفذ على الجهاز الذي يستقبل (4444) كما في الجهاز الذي يرسل.

لا يُظهر هذا الأمر أي إخراج، ولكن الخيار يخبر netcat بأن يأخذ الإدخال من الملف المحدد.

netcat 149.28.86.131 4444 < ata_file

4. أخيرًا، انتقل إلى الجهاز الذي يستقبل (ubuntu1) وقم بتشغيل أمر cat أدناه لفحص محتوى ملف ata_file.

cat ata_file

يمكنك رؤية رسالة Hello from ATA أدناه، مما يشير إلى نجاح عملية النقل.

Verifying the Transfer Worked

إرسال الدلائل إلى جهاز آخر

حتى الآن، قمت بإرسال ملف واحد بنجاح من جهاز إلى آخر. ولكن ماذا لو أردت إرسال دليل بأكمله مع كل دلائله وملفاته بدلاً من ذلك؟ يمكن لـ Netcat أن يرسل الدلائل أيضًا!

فرضًا أن لديك دليل نسخ احتياطي يسمى apache_backup على الجهاز الإرسال (ubuntu2). ستحتاج أولاً إلى ضغط الدليل، ثم إرساله وفك ضغطه على الجهاز الواستقبال (ubuntu1).

1. على الجهاز الواستقبال (ubuntu1)، قم بتشغيل الأمر التالي لإنشاء دليل جديد يسمى apache_backup والانتقال (cd) إلى هذا الدليل.

mkdir apache_backup && cd apache_backup
Creating the apache_backup Directory

2. بعد ذلك، قم بتشغيل الأمر أدناه للبدء في الاستماع على المنفذ 4444 واستخراج الملفات المضغوطة التي يرسلها الجهاز الإرسال (ubuntu2) إلى الجهاز الواستقبال (ubuntu1).

هذا الأمر لا يظهر ناتجًا، ولكن خيارات tar xf – تأخذ المدخلات من Netcat (المدخلات القياسية) وتستخرج جميع الملفات إلى الدليل الحالي.

netcat -l 4444 | tar xf -

3. على الجهاز الإرسال (ubuntu2)، قم بتشغيل الأوامر التالية لإنشاء دليل (apache_backup)، وبعض ملفات النص، وإرسالها إلى الجهاز الواستقبال (ubuntu1).

هذه الأوامر لا تظهر ناتجًا، ولكن ستتحقق من نجاح النقل في الخطوة التالية.

# يقوم بإنشاء دليل apache_backup وبعض ملفات النص في الداخل
mkdir apache_backup && cd apache_backup && touch ata{1..5}.txt
# يضغط على الدليل الحالي ويقوم بإرساله إلى الجهاز الواستقبال
tar cf - . | netcat 149.28.86.131 4444

4. في النهاية، انتقل إلى الجهاز الواستقبال (ubuntu1)، اضغط على Ctrl+C لإيقاف الاستماع على المنفذ 4444، وقم بتشغيل الأمر ls لعرض قائمة الملفات داخل apache_backup.

ls

كما يمكنك رؤية أدناه، تم نقل ملفات دليل apache_backup بنجاح إلى دليل apache_backup على الجهاز الواستقبال.

Verifying Transferred Files on the Receiving Host

نقل القرص أو القسم بأكمله إلى جهاز استقبال آخر

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

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

/ dev / sdb هو القرص الثاني الصلب على الجهاز. ولكن في هذه الحالة ، / dev / sdb هو قرص صلب فارغ مرتبط بهذا الجهاز لهذا البرنامج التعليمي.

netcat -l 4444 | bzip2 -d | dd of=/dev/sdb

2. على المضيف الواستقبالي (أوبونتو 2) ، قم بتشغيل الأمر التالي للعثور على جميع الأقراص والأقسام على جهازك.

 fdisk -l

كما يمكنك رؤية أدناه ، / dev / vda1 / هو القسم الجذري للمضيف الإرسال في هذا البرنامج التعليمي. قد يكون الإخراج الخاص بك مختلفًا اعتمادًا على تكوين الجهاز الخاص بك.

Finding All Disks and Partitions

3. قم بتشغيل الأمر التالي على المضيف الإرسالي (أوبونتو 2) ، الذي لا يحتوي على إخراج ، ولكن يرسل القسم / dev / vda1 إلى المضيف الواستقبالي (أوبونتو 1) عبر منفذ 4444.

يستغرق ضغط القسم وإرساله إلى المضيف الواستقبالي وقتًا طويلاً ، اعتمادًا على حجم القسم.

bzip2 -c /dev/vda1 | netcat 149.28.86.131 4444

4. بمجرد اكتمال العملية ، انتقل إلى المضيف الواستقبالي (أوبونتو 1) ، وسترى الناتج أدناه.

من المتوقع حدوث خطأ “لا توجد مساحة متاحة على الجهاز” لأن /dev/vda1 ربما يكون أكبر من /dev/sdb. لكنك تفهم الفكرة! يمكنك استخدام Netcat لإرسال القرص الصلب بأكمله أو القسم إلى جهاز آخر.

Viewing the Sending Disk/Partition Process

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

# يركب القسم /dev/vda1
mount /dev/vda1 /media 
# يعرض جميع الملفات في القسم
ls media

كما يمكنك رؤية أدناه، تم نقل جميع الملفات والمجلدات من /dev/vda1 بنجاح إلى /dev/sdb.

Verifying Data Integrity of the File Transfer

إنشاء خادم ويب بسيط

يمكن أن يكون من المتعب تكوين خادم ويب مكتمل مثل Apache أو NGINX فقط لتشخيص مشكلة خادم الويب. بدلاً من ذلك، قم بإنشاء خادم ويب بسيط باستخدام Netcat لتحديد مشكلات خادم الويب بسرعة.

لإنشاء خادم ويب بسيط:

1. انتقل إلى الجهاز المستلم وقم بتشغيل الأوامر التالية لإنشاء دليل رئيسي (nc-webserver-docroot) للخادم الويب ونص برنامج نصي (httpresponse.sh) يُولِد الاستجابة HTTP.

mkdir -pv /root/nc-webserver-docroot/
Creating a Webserver Root Directory

2. بعد ذلك، أنشئ ملف index.html في الدليل /root/nc-webserver-docroot/ باستخدام محرر النص الذي تفضله واملأ الملف بالشفرة التالية. يحتوي ملف HTML هذا على المحتويات التي سيقدمها خادم الويب Netcat.

<!doctype html>

<html lang="en">

<head>
	<title>NETCAT Testing network connectivity </title>
</head>

<body>
	<h1>NETCAT Test</h1>
	<p>Connection Successful! Your networking skills are awesome!</p>
</body>

</html>

3. أنشئ ملف برنامج نصي يسمى httpresponse.sh في الدليل /root/nc-webserver-docroot/ واملأه بالشفرة التالية.

هذا النص يقوم بإرجاع محتويات ملف /root/nc-webserver-docroot/index.html كاستجابة HTTP إلى أي عميل يرسل طلبًا إلى خادم الويب Netcat الخاص بك.

#!/bin/bash
printf 'HTTP/1.1 200 OK\n\n%s' "$(cat /root/nc-webserver-docroot/index.html)"

4. الآن، قم بتشغيل أمر chmod أدناه، الذي لا يعطي إخراجًا ولكن يجعل ملف httpresponse.sh قابلًا للتنفيذ (+x).

chmod +x /root/nc-webserver-docroot/httpresponse.sh

5. قم بتشغيل الأمر ncat أدناه لبدء خادم الويب Netcat على منفذ 7777.

تأكد من استبدال المنفذ 7777 برقم المنفذ الذي تختاره، والذي لا يُستخدم من قبل أي خدمة أخرى على نظامك.

الخيارات التالية تؤثر على سلوك خادم الويب Netcat:

  • -l – يخبر Ncat بالاستماع لاتصال وارد.
  • -v – يُمكّن وضع التفاصيل لعرض جميع طلبات HTTP الواردة في الطرفية الخاصة بك.
  • -c - يُحدد المسار إلى النص البرمجي httpresponse.sh الذي يُولّد الاستجابات HTTP.
  • -keep-open – يُبقي مستمع Ncat مفتوحًا حتى بعد إغلاق الاتصال الأول. هذا الخيار مفيد إذا كنت تختبر خادم الويب الخاص بك مع عملاء متعددين.
ncat -lv 7777 -c /root/nc-webserver-docroot/httpresponse.sh --keep-open

سترى الإخراج التالي بمجرد تشغيل خادم الويب Netcat والاستماع على منفذ 7777 على جميع الواجهات الشبكية المتاحة.

Starting the Ncat Server

6. الآن، افتح نافذة الأوامر الأخرى وقم بتشغيل الأمر التالي لاختبار خادم الويب Netcat الخاص بك (http://localhost:7777).

curl -vvv http://localhost:7777

المخرجات أدناه تظهر أن خادم الويب Netcat يعمل كما هو متوقع ويمكنه إرجاع محتويات الملف /root/nc-webserver-docroot/index.html كاستجابة HTTP.

Testing your Ncat server

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

تهانينا! لقد قمت بإنشاء خادم ويب Netcat أدنى لاختبار توصيل الشبكة بنجاح!

Verifying the HTTP Request from the curl Client

الاستنتاج

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

بهذه المعرفة الجديدة، لماذا لا ترفع مهاراتك في الشبكات أكثر وتصبح مستخدمًا قويًا في أمان المعلومات؟

Source:
https://adamtheautomator.com/how-to-use-netcat/