مقدمة
واحدة من أكبر مزايا استخدام Linux هي وفرة الأدوات المساعدة المفيدة التي يوفرها. عادةً ما تكون الميزات المضمنة في البرنامج كافية لمعظم المبرمجين للقيام بعملهم. هذا يعني أنك في معظم الأوقات لن تحتاج إلى تنزيل برامج وتطبيقات خارجية. ستوفر لك الأدوات المدمجة فائدة كافية. ومن بين هذه الميزات المفيدة أداة netcat.
عندما يتعلق الأمر بعالم أدوات الشبكات، فإن netcat يعتبر بمثابة سلاح قوي للغاية. إنه أمر متعدد الاستخدامات بشكل لا يصدق ويمكنك استخدامه لأغراض متعددة. على سبيل المثال، يمكنك استخدام هذه الأداة الفردية لمراقبة واختبار، وكذلك نقل جميع أنواع الملفات والبيانات عبر اتصالات نظامك. في هذا الدليل، سنستكشف كيفية تنفيذ كل هذه الإجراءات على VPS باستخدام netcat.
العثور على Netcat
يتوفر Netcat عادةً في جميع توزيعات Linux الحديثة. مما يعني أنه على الأرجح لديك بالفعل ولا تحتاج إلى بذل جهد إضافي لتثبيته. في برنامجنا التعليمي، سنستخدم Ubuntu 12.04 VPS. يمكنك تثبيت خادم Ubuntu الخاص بك باتباع برنامجنا التعليمي. عادةً ما يأتي Ubuntu مع إصدار BSD من أداة netcat. ضع في اعتبارك أنه إذا كان لديك إصدار آخر، فقد يعمل بشكل مختلف قليلاً.
مراجعة الصيغة الأساسية
نبدأ بالتعرف على الصيغة العامة التي تعمل في أداة netcat. يمكنك تشغيل netcat عن طريق بدء TCP connection. يجب بدء الاتصال بمضيف بعيد. إليك الصيغة الأساسية لـ netcat:
|
1 |
netcat [options] host port |
سيحاول هذا الأمر بدء اتصال TCP بمضيف بعيد. يعتمد المضيف الذي يتصل به على رقم المنفذ الذي تحدده في الأمر. سيكون الاتصال غير مشفر. كما ترى، يعمل هذا الأمر بشكل مشابه لطريقة عمل أمر telnet.
من ناحية أخرى، يمكنك أيضًا بدء UDP collection. لإرسال حزمة UDP بدلاً من TCP، يجب عليك استخدام الخيار -u. هذا هو الشكل الذي سيبدو عليه:
|
1 |
netcat -u host port |
إذا كنت ترغب في ذلك، يمكنك أيضًا تحديد نطاق من المنافذ. للقيام بذلك، تحتاج إلى وضع شرطة بين المنفذ الأول والأخير. إليك مثال:
|
1 |
netcat host startport-endport |
يمكنك إضافة المزيد من العلامات إلى هذا أيضًا. شيء آخر يجب ملاحظته هو أنه يمكنك استخدام netcat و nc بالتبادل. سيقودانك إلى نفس الأمر، مما يعني أنهما اسمان مستعاران لبعضهما البعض.
استخدام Netcat لفحص المنافذ
بادئ ذي بدء، دعنا نستكشف أحد الاستخدامات الأكثر شيوعًا لـ netcat. سنعرف كيفية استخدامه كفاحص للمنافذ. في معظم الحالات، من الأفضل استخدام أداة مثل nmap. ومع ذلك، إذا كنت تحتاج فقط إلى إجراء عمليات فحص بسيطة للمنافذ، فإن netcat مفيد. يمكن أن يساعدك في تحديد المنافذ المفتوحة بسهولة.
لاستخدام netcat كفاحص للمنافذ، تحتاج إلى تحديد نطاق المنافذ. ستفعل ذلك باستخدام الخيار -z. وبالتالي، سيقوم النظام بفحص نطاق المنافذ بدلاً من محاولة الاتصال. لنفترض أننا نريد فحص المنفذ 1 حتى المنفذ 1000:
|
1 |
netcat -z -v domain.com 1-1000 |
بالإضافة إلى الأمر -z، استخدمنا أيضًا الخيار -v. يتيح لنا هذا الأخير تقديم المزيد من المعلومات للأمر. فهو يسمح لنا بأن نكون أكثر تفصيلاً.
ستحصل على مخرجات مثل هذه في المقابل:

تظهر المخرجات الكثير من المعلومات لكل منفذ على حدة. ستعرف حالة الاتصال لكل منفذ. من ناحية أخرى، يمكنك استخدام عنوان IP بدلاً من اسم النطاق إذا كنت تعرفه. هذا يجعل العملية أسرع بكثير. إليك مثال:
|
1 |
netcat -z -n -v 198.51.100.0 1-1000 |
استخدمنا العلامة -n للإشارة إلى أن النظام لا يحتاج إلى استخدام DNS لحل عنوان IP.
عادةً ما يتم إرسال رسائل الإرجاع إلى الخطأ القياسي. لتصفية النتائج بشكل أسرع، يمكنك إعادة توجيهها إلى المخرج القياسي. سنستخدم صيغة bash التالية 2>&1 للقيام بذلك. بعد ذلك، سنقوم بتصفية النتائج باستخدام grep. دعنا نطبق هذا على مثالنا:
|
1 |
netcat -z -n -v 198.51.100.0 1-1000 2>&1 | grep نجح |
سيبدو المخرج مشابهًا لهذا:
![]()
يظهر المخرج أن المنفذ 22 فقط هو المفتوح للاتصال في النطاق المحدد. ويصادف أن المنفذ 22 هو منفذ SSH التقليدي.
الاتصال عبر Netcat: كيف يعمل؟
بعد ذلك، سنرى كيف يمكنك استخدام netcat لإرسال حزم TCP و UDP. ليس هذا فحسب، بل يمكنه أيضًا استقبال الحزم على منافذ مختلفة. ونتيجة لهذه القدرة، يمكنك استخدام مثيلين من netcat لإنشاء علاقة بين العميل والخادم. في البداية، ستحدد العميل والخادم. بعد التكوين الأولي، يمكن لكلا العميلين إرسال واستقبال الحزم في أي من الاتجاهين.
بطبيعة الحال، سيتعين عليك تكوين netcat على نظام واحد للاستماع للاتصالات على منفذ واحد. للقيام بذلك، يجب عليك استخدام المعلمة -l. باستخدام هذا، يمكنك تحديد المنفذ الذي تختاره على النحو التالي:
|
1 |
netcat -l 4444 |
الآن سيستمع بروتوكول TCP على هذا الجهاز للاتصالات على المنفذ 4444. وتجدر الإشارة إلى أنه إذا كنت مستخدمًا عاديًا أو غير جذر (non-root)، فلن تتمكن من الوصول إلى المنافذ الأقل من 1000.
بعد ذلك، يتعين عليك تكوين جهاز ثانٍ لإنشاء اتصال. ستستخدم نفس رقم المنفذ وتحدد اسم نطاق معين مثل هذا:
|
1 |
netcat domain.com 4444 |
لن يعطيك تشغيل هذا الأمر أي مخرج. ومع ذلك، فإنه سيقوم بإنشاء الاتصال. هذا يعني أنه يمكنك البدء في إرسال الرسائل من أي من الخادمين إلى الآخر. للقيام بذلك، كل ما عليك فعله هو كتابة الرسالة ثم الضغط على ENTER. ستظهر الرسالة على كلا الشاشتين.
بمجرد الانتهاء، يمكنك إغلاق اتصال TCP بالضغط على CTRL+D.
هل يمكنك إرسال الملفات باستخدام Netcat؟
بعد ذلك، سنوضح لك كيف يمكنك إرسال الملفات عبر netcat. باستخدام اتصال TCP، يمكنك إرسال الرسائل بالإضافة إلى أنواع أخرى من البيانات. للبدء، يجب عليك تحديد جهاز واحد للاستماع للاتصالات. ومع ذلك، بدلاً من كتابة المعلومات في الأمر، سنضعها في ملف مثل هذا:
|
1 |
netcat -l 4444 > received_file |
على الجهاز الآخر، سيتعين عليك إنشاء ملف نصي جديد. إليك الأمر الذي يجب استخدامه:
|
1 |
echo "Hello, this is a file" > original_file |
لنقل الملف، ستستخدمه كمدخل للاتصال على الكمبيوتر الذي يستمع:
|
1 |
netcat domain.com 4444 < original_file |
سيعرض الكمبيوتر الآخر ملفًا جديدًا يسمى 'received_file'. وسوف يحتوي على جميع المعلومات التي كتبناها:
|
1 |
cat received_file |
يمكنك استخدام هذه الأداة المساعدة وتحويلها إلى برنامج لنقل الملفات. لنفترض أنك تريد نقل محتويات دليل (directory). سنقوم بذلك عن طريق إنشاء ملف tarball غير مسمى سننقله إلى النظام ونفك حزمته في الدليل البعيد. على الجهاز الآخر، نحتاج إلى الاستعداد لاستلام الملف. نحن نعلم أننا سنحتاج إلى فك ضغطه واستخراجه. للقيام بذلك، أصدر هذا الأمر:
|
1 |
netcat -l 4444 | tar xzvf - |
تشير الشرطة (-) إلى أن tar سيعمل على الإدخال القياسي (standard input). يأتي هذا من netcat على الخادم الأولي عندما أنشأنا الاتصال الأولي.
أخيرًا، يمكننا وضع محتويات الدليل بأكمله في ملف tarball وإرساله عبر netcat مثل هذا:
|
1 |
tar -czf - * | netcat domain.com 4444 |
توضح الشرطة (-) في أمر tar أننا نطلب من النظام أرشفة (tar) وضغط محتويات الدليل. كما أنها توجهه لكتابة النتيجة في المخرج القياسي (standard output). سيمر الملف عبر اتصال TCP إلى الطرف الآخر. سيقوم خادم الاستقبال بفك ضغطه وحفظه في الدليل البعيد الحالي.
تمامًا مثل هذا، يمكنك نقل أنواع أخرى من البيانات عبر netcat أيضًا. يستخدم العديد من الأشخاص الأمر dd لأخذ لقطات من الأقراص (image disks) ونقلها. للحصول على طريقة أخرى لنقل البيانات والملفات، ألق نظرة على البرنامج التعليمي الخاص بنا الذي يوضح كيفية ضمان الأمان أثناء نقل الملفات باستخدام SFTP.
استخدام Netcat كخادم ويب
وظيفة مفيدة أخرى لـ netcat هي أنه يمكنك استخدامه لاختبار صفحاتك. لنفترض أننا نستخدم خادمًا لإنشاء ملف HTML مثل هذا الملف:
|
1 |
nano index.html |
هذا هو كود HTML الذي يحتويه الملف:
|
1 2 3 4 5 6 7 8 9 10 |
<html> <head> <title>صفحة اختبار</title> </head> <body> <h1>عنوان المستوى 1</h1> <h2>عنوان فرعي</h2> <p>نص عادي هنا</p> </body> </html> |
أدخل هذا في الملف، ثم احفظه وأغلقه. عادةً، المنفذ 80 هو منفذ الويب الافتراضي. كمستخدم عادي ليس لديه صلاحيات root، سنختار المنفذ 8888. بافتراض أنك تريد تقديم الصفحة والتحقق منها مرة واحدة، يجب عليك استخدام هذا الأمر:
|
1 |
printf 'HTTP/1.1 200 OK\n\n%s' "$(cat index.html)" | netcat -l 8888 |
من أجل عرض محتوى الملف، انتقل إلى متصفحك. قم بزيارة ما يلي:
|
1 |
http://server_IP:8888 |
ستتمكن من رؤية الصفحة التي قمت ببرمجتها باستخدام ملف HTML:

بمجرد حصولك على الصفحة، سيتم إغلاق اتصال netcat. هذا يعني أن تحديث الصفحة سيعطيك خطأً بدلاً من المحتوى. هذا لأننا قمنا بتهيئته لتقديم الصفحة مرة واحدة فقط. إذا كنت تريد الاستمرار في تلقي الاتصالات لرؤية الصفحة إلى أجل غير مسمى، فستستخدم كودًا مختلفًا:
|
1 |
while true; do printf 'HTTP/1.1 200 OK\n\n%s' "$(cat index.html)" | netcat -l 8888; done |
هنا، قمنا بلف الأمر الأخير في حلقة تكرارية لا نهائية. إذا كنت تريد إيقاف الحلقة، فكل ما عليك فعله هو الضغط على CTRL-C. الآن يمكنك الاستمرار في عرض صفحتك وطريقة عرضها حتى بعد إغلاق الاتصال الأول. ومع ذلك، فإن هذا هو الحد الأقصى من الوظائف التي يمكنك استخلاصها من استخدام أداة netcat كخادم ويب. لا تحاول استخدامها لتقديم مواقع ويب فعلية لأنها لا توفر أي أمان. بدلاً من ذلك، يمكنك إلقاء نظرة على دروسنا التعليمية حول كيفية تثبيت برامج خادم الويب مثل Nginx أو Apache.
الخاتمة
في هذا الدرس التعليمي، قمنا بتغطية أداة netcat واستكشفنا تعدد استخداماتها كأداة على Ubuntu. كما غطينا في الأقسام أعلاه، يمكنك استخدامها لأغراض الاتصال، ونقل البيانات، وتقديم الصفحات. وهي تعمل بشكل مثالي للتفاعلات السريعة بين الخوادم من خلال اتصالات TCP/UDP. إنها ميزة مفيدة للغاية للكثير من الوظائف والتشخيصات الأساسية.
حوسبة سعيدة!
التعليقات
لا توجد تعليقات بعد. كن أول من يعلق.