الأمر nc في أنظمة Linux يُعرف بكونه أداة متعددة الاستخدامات تساعد على التعامل مع الشبكات بسهولة ومرونة. سواء كنت ترغب في فحص المنافذ المفتوحة، اختبار الاتصال بين جهازين، أو حتى نقل الملفات بسرعة عبر الشبكة، فإن nc يقدم حلولاً مباشرة دون الحاجة إلى أدوات معقدة. ما يميزه هو بساطته وقدرته على أداء مهام متقدمة تهم كل من مسؤولي الشبكات والمستخدمين الراغبين في تشخيص مشاكل الاتصال. في السطور التالية ستتعرف على أبرز استخداماته العملية وكيف يمكن أن يسهل عليك التعامل مع مواقف مختلفة في الشبكات.
أداة netcat شائعة جدًا بين مسؤولي الشبكات. ومع ذلك، يمكنها أيضًا خدمة أغراض مختلفة لك كمستخدم عادي لنظام لينكس في حياتك اليومية. أثناء بحثي، وجدتُ بعض حالات الاستخدام الرائعة لأمر nc.
6. إنشاء اتصالات الشبكة
سأبدأ بأبسط وأهم ما يمكن لأمر nc فعله. وهو إنشاء اتصال TCP أو UDP مباشر بين جهازين. هذا هو حجر الأساس للعديد من الاستخدامات الأكثر تقدمًا.
لنفترض أن لديك نظامي لينكس. للتوضيح، سأستخدم جهاز Ubuntu وجهاز Linux Mint. سيعمل Ubuntu كخادم أو مستمع، بينما سيعمل Linux Mint كعميل أو موصل.
أولًا، شغّل المستمع.
nc -l -p 12345
الخيار -l مخصص لوضع المستمع. الخيار -p مخصص لتحديد المنفذ. هنا، نستخدم المنفذ 12345، ولكن يمكنك استخدام أي منفذ آخر، إلا إذا كان قيد الاستخدام بالفعل. بعد تنفيذ هذا الأمر، سيبقى جهازك في مكانه بانتظار الاتصال.
الآن، من جهاز التوصيل، نفّذ ما يلي:
nc ip_address port_number
استبدل عنوان IP بعنوان IP الخاص بخادمك. سيكون رقم المنفذ هو الذي استخدمته في المستمع. في حالتي، كما يلي:
nc 192.168.100.4 12345
يُنشئ هذا اتصال TCP بين الجهازين. علاوة على ذلك، فهو ليس اتصالاً أحادي الاتجاه حيث يستطيع الخادم فقط الإرسال، بل يمكن لكلا الطرفين الإرسال والاستقبال.
إذا كنت ترغب في إنشاء اتصال UDP، يمكنك القيام بذلك باستخدام الخيار -u. على الجهاز المُستمع، شغّل:
nc -u -l -p 12345
على جهاز العميل، قم بتشغيل:
nc -u 192.168.100.4 12345
اتصالات UDP أقل موثوقية من اتصالات TCP. ومع ذلك، فهي تُفضّل عندما تكون السرعة حرجة ويكون فقدان البيانات مقبولاً.
5. فحص المنافذ
بالإضافة إلى الاتصال بمنفذ واحد، يمكن لـ nc فحص مجموعة كاملة من المنافذ لمعرفة أيها مفتوح. يمكن أن يساعد هذا في استكشاف الأخطاء وإصلاحها أو حصر الخدمات. ولهذا السبب يُطلق على nc أحيانًا اسم “السكين السويسري” في الشبكات.
لنفترض أنك تريد معرفة منافذ TCP المفتوحة على جهاز الخادم من جهاز العميل. قم بإنشاء مُنصت على الخادم كما في السابق.
nc -l -p 12345
ثم من العميل قم بتشغيل:
nc -z -v 192.168.100.4 20-130
يُشير العلم -z إلى استخدام netcat لوضع Zero-I/O. هذا يعني أن netcat يجب أن يبحث فقط عن الشياطين المُنصتة بدلاً من إرسال أي بيانات. يُفعّل العلم -v وضع verbose، الذي يعرض النتائج بشكل أفضل. نُحدد أيضًا نطاق المنافذ من 20 إلى 130 التي نهتم بها.
تحذير
افحص فقط الأنظمة التي تملكها أو التي لديك إذن صريح بفحصها. قد يكون الفحص غير المُصرّح به غير قانوني أو يُنظر إليه على أنه مُعادٍ.
في العرض التوضيحي، رفضت جميع المنافذ تقريبًا الاتصال لأنها كانت مغلقة، باستثناء المنفذ 80. بنفس الطريقة، يمكنك أيضًا فحص منافذ UDP.
4. نقل الملفات
يُمكن لـ Netcat إرسال الملفات مباشرةً عبر TCP أو UDP دون الحاجة إلى FTP أو SCP أو المجلدات المُشتركة. هذا يجعله مثاليًا للنقل السريع، خاصةً عند عدم توفر طرق أخرى. لنُرسل ملفًا من نظام Linux Mint إلى جهاز Ubuntu.
لديّ ملف باسم test.txt، اسمه “ملف لاختبار نقل ملفات nc”. أولًا، أنشئ مُنصتًا على الجهاز الذي تريد نقل الملف إليه. عند القيام بذلك، أعد توجيه مُخرجات الاتصال إلى ملف، كما هو موضح أدناه.
nc -l -p 12345 > received.txt
بعد ذلك، على جهاز المرسل، قم بإعادة توجيه محتوى الملف إلى اتصال nc الخاص بك مثل هذا.
nc 192.168.100.4 12345
للتحقق من نجاح عملية النقل، استخدم الأمر ls للتحقق من وجود الملف، ثم الأمر cat لقراءة محتواه. يمكنك أيضًا عكس العملية وإرسال الملفات في الاتجاه المعاكس. كل ما عليك فعله هو عكس الأدوار باستخدام الأوامر التي عرضتها أعلاه.
3. إنشاء خادم ويب
يعمل Netcat كخادم HTTP بسيط، حيث يستمع إلى منفذ ويرسل ملفات HTML خامًا إلى أي شخص يتصل. بالطبع، لن يحل محل Apache أو Nginx. مع ذلك، فهو مثالي للعروض التوضيحية السريعة، أو تصحيح الأخطاء، أو التعرّف على طلبات HTTP.
أولًا، أنشئ ملف HTML ثابتًا (أسميه page.html) على جهاز الخادم. بالنسبة لي، هذا هو Ubuntu.
echo -e "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<h1>Hello from Netcat</h1>" > page.html
في هذا الملف، أدرجتُ سطر حالة HTTP، ورأس نوع المحتوى، ونص HTML بسيطًا. تسلسلات \r\n أساسية في HTTP لفصل الرؤوس عن النص.
الآن، شغّل خادم ويب netcat على نفس الجهاز:
while true; do nc -l -p 8080
نستخدم حلقة while هنا حتى يبقى الخادم قيد التشغيل حتى بعد كل طلب. نستمع على المنفذ 8080 ونرسل ملف HTML كاستجابة. الآن، افتح متصفح ويب من جهاز العميل (لينكس منت في حالتي) وقم بزيارة صفحة HTML الثابتة بتحديد عنوان IP والمنفذ.
http://192.168.100.4:8080
يمكنك أيضًا استخدام الأمر curl لجلب صفحة HTML.
curl http://192.168.100.4:8080
2. أنشئ تطبيق دردشة بسيطًا
يستطيع Netcat ربط جهازين طرفيين، بحيث يظهر أي شيء تكتبه على أحدهما فورًا على الآخر. باستخدام حيلة بسيطة في واجهة المستخدم، يمكنك تحويله إلى أداة دردشة فورية. لا حاجة لأي تطبيقات دردشة خارجية.
للقيام بذلك، عليك إنشاء اتصال شبكة كما هو موضح في القسم الأول. أنشئ مستمعًا على أحد الجهازين:
nc -l -p 12345
ثم قم بالاتصال به من جهاز آخر.
nc 192.168.100.4 12345
بمجرد إنشاء الاتصال، يمكنك كتابة أي شيء على أحد الجهازين، وسيظهر على الجهاز الآخر. ثم يمكنك كتابة أي شيء على الجهاز الثاني، وسيظهر على الجهاز الأول.
يمكنك الآن الكتابة ذهابًا وإيابًا في الطرفية لإرسال الرسائل من جهاز كمبيوتر إلى آخر. حاولتُ أن أبتكر شيئًا ما لأرى إن كان بإمكاني أيضًا إضافة أسماء المُرسِلين مع الرسائل المُقابلة. بهذه الطريقة، يُسهّل ذلك تتبُّع مَن أرسل الرسالة.
يمكنك القيام بذلك بإضافة اسم المُرسِل باستخدام الصدى وتكرار while. إليك الإعداد. شغّل هذا على جهاز الخادم:
while read msg; do echo "Ubuntu: $msg"; done | nc -l -p 12345
وهذا على آلة الموصل:
while read msg; do echo "LM: $msg"; done | nc 192.168.100.4 12345
ينتظر الأمر أعلاه المُدخلات، ثم يُضيف إليها بادئة، ثم يُرسلها. على الطرف المُستقبِل، تظهر البادئة كما لو أنها مُرسَلة تمامًا. حتى لو كان هناك أكثر من مستخدمَين، ستتمكن من تتبُّع الرسائل بهذه الطريقة.
1. استكشاف أخطاء الشبكة وإصلاحها
أخيرًا، يُمكنك استخدام الأمر nc لإصلاح بعض مشاكل الشبكات الشائعة. عند وجود عطل في الشبكة، يُمكنه المساعدة في تأكيد ما إذا كانت مشكلة في الاتصال، أو مشكلة في الخدمة، أو مشكلة في جدار الحماية. يُمكنه اختبار المنافذ، ومحاكاة الخدمات، والتحقق من الاستجابات الأولية.
لنفترض أن أحد التطبيقات لا يستجيب، يُمكنك استخدام الأمر nc لمعرفة ما إذا كان يُمكنك الاتصال بمنفذه.
nc -zv 192.168.100.4 22
إذا تعطل أو ظهرت رسالة “تم رفض الاتصال”، فسيتم إغلاق المنفذ أو تصفيته.
يمكنك التواصل يدويًا مع الخدمة لمعرفة ما إذا كانت تستجيب كما هو متوقع. على سبيل المثال، التحقق من استجابة خدمة HTTP محلية.
nc 192.168.100.4 8080
إذا نجحت الخدمة، فستُرسل ترويسة استجابة HTTP، وربما بعض رموز HTML. يُعد هذا مثاليًا لتصحيح أخطاء تطبيقات الويب التي لا تعمل بشكل صحيح دون الحاجة إلى متصفح.
إذا كنت تشك في أن أحد التطبيقات يمكنه الاتصال بمنفذ ولكنه لا يرسل البيانات الصحيحة، يمكنك التظاهر بأنك الخدمة والتقاط ما يرسله التطبيق. يُعد هذا مفيدًا لتصحيح أخطاء بروتوكولات العميل/الخادم المخصصة. باستخدام netcat، يمكنك إجراء هذه الاختبارات الصغيرة بسرعة ومعرفة مكان عطل شبكتك وكيفية إصلاحه.
هناك الكثير مما يمكنك فعله باستخدام netcat. إذا كنت مهتمًا، يمكنك الاطلاع على صفحة دليل المستخدم الرسمية لـ nc. هناك العديد من أوامر شبكات لينكس الأخرى التي ننصحك باستكشافها.
الأمر nc ليس مجرد أداة تقليدية في Linux بل وسيلة ذكية لتشخيص الشبكات والتأكد من سلامة الاتصال بين الأجهزة. سهولة استخدامه مع إمكانياته المتعددة تجعله خياراً مثالياً لمن يبحث عن أداة عملية وموثوقة لفحص الشبكات. بتجربته ستكتشف بنفسك كيف يمكن أن يوفر الكثير من الوقت والجهد عند التعامل مع مشكلات الاتصال اليومية.