مقدمة
يشتهر لينكس باحتوائه على عدد كبير من أدوات سطر الأوامر المتطورة والمفيدة في معظم توزيعاته. غالبًا، يمكن لمسؤولي النظام تنفيذ العديد من مهامهم باستخدام الأدوات المدمجة دون الحاجة إلى تثبيت برامج إضافية. في هذا الدليل، سنناقش كيفية استخدام أداة netcat. يساعدك هذا الأمر متعدد الاستخدامات في مراقبة واختبار وإرسال البيانات عبر اتصالات الشبكة. يُفترض أن يكون Netcat متاحًا في جميع توزيعات لينكس الحديثة تقريبًا. يأتي أوبونتو مزودًا بنسخة BSD من netcat، وهذا ما سنستخدمه في هذا الدليل. قد تعمل الإصدارات الأخرى بشكل مختلف أو توفر خيارات أخرى.
التعليمات العامة
بشكل افتراضي، يعمل netcat عن طريق إنشاء اتصال TCP مع مضيف بعيد.
الأمر الأساسي هو:
netcat [خيارات] منفذ المضيفيحاول هذا الأمر بدء اتصال TCP بالمضيف المُحدد على رقم المنفذ المُحدد. هذا يُشبه أمر telnet القديم في لينكس. يُرجى العلم أن اتصالك ليس مُشفّرًا بالكامل.
إذا كنت تريد إرسال حزمة UDP بدلاً من بدء اتصال TCP، فيمكنك استخدام الخيار -u:
netcat -u منفذ المضيفيمكنك تحديد نطاق من المنافذ عن طريق وضع شرطة بين المنفذ الأول والأخير:
منفذ بدء/نهاية مضيف netcatيتم استخدامه عادةً مع بعض الأعلام الإضافية.
في معظم الأنظمة، يُمكن استخدام netcat أو nc بالتبادل. هما اسمان مستعاران لنفس الأمر.
أمر لاستخدام Netcat لمسح المنافذ
من أكثر استخدامات netcat شيوعًا فحص المنافذ. مع أن netcat قد لا يكون الأداة الأكثر تطورًا لهذه المهمة (nmap خيار أفضل في معظم الحالات)، إلا أنه قادر على إجراء عمليات فحص بسيطة للمنافذ لتحديد المنافذ المفتوحة بسهولة. نقوم بذلك بتحديد نطاق المنافذ المراد فحصها، كما فعلنا سابقًا، مع استخدام الخيار -z لإجراء الفحص بدلًا من محاولة بدء اتصال.
على سبيل المثال، يمكننا مسح جميع المنافذ حتى 1000 عن طريق إصدار هذا الأمر:
netcat -z -v domain.com 1-1000إلى جانب الخيار -z، قمنا أيضًا بتحديد الخيار -v لإخبار netcat بتوفير معلومات أكثر تفصيلاً.
وسيكون الناتج على النحو التالي:
الإخراج nc: فشل الاتصال بمنفذ domain.com 1 (tcp): رفض الاتصال nc: فشل الاتصال بمنفذ domain.com 2 (tcp): رفض الاتصال nc: فشل الاتصال بمنفذ domain.com 3 (tcp): رفض الاتصال nc: فشل الاتصال بمنفذ domain.com 4 (tcp): رفض الاتصال nc: فشل الاتصال بمنفذ domain.com 5 (tcp): رفض الاتصال nc: فشل الاتصال بمنفذ domain.com 6 (tcp): رفض الاتصال nc: فشل الاتصال بمنفذ domain.com 7 (tcp): رفض الاتصال. . . نجح الاتصال بمنفذ domain.com 22 [tcp/ssh]! . . .
كما ترى، يوفر هذا النموذج معلومات كثيرة، ويخبرك عن كل منفذ بنجاح الفحص. إذا كنت تستخدم اسم نطاق، فهذا هو النموذج المناسب.
مع ذلك، إذا كنت تعرف عنوان IP المطلوب، فسيكون الفحص أسرع بكثير. يمكنك بعد ذلك استخدام علامة -n لتحديد أنك لست بحاجة إلى تحليل عنوان IP باستخدام DNS:
نتكات -z -n -v 198.51.100.0 1-1000في الواقع، تُرسَل رسائل الإرجاع إلى الخطأ القياسي (راجع مقالتنا حول إعادة توجيه الإدخال/الإخراج لمزيد من المعلومات). يمكننا إرسال رسائل الخطأ القياسي إلى المخرج القياسي، مما يُسهّل علينا تصفية النتائج.
نُعيد توجيه الخطأ المعياري إلى الناتج المعياري باستخدام صيغة bash 2>&1. ثم نُرشِّح النتائج باستخدام grep:
netcat -z -n -v 198.51.100.0 1-1000 2>&1 | نجح grepنجح اتصال الإخراج بمنفذ 198.51.100.0 22 [tcp/*]!هنا، يمكننا أن نرى أن المنفذ المفتوح الوحيد في النطاق من 1 إلى 1000 على الكمبيوتر البعيد هو المنفذ 22، وهو منفذ SSH التقليدي.
كيفية التواصل عبر NetCat
لا يقتصر Netcat على إرسال حزم TCP وUDP فحسب، بل يمكنه أيضًا الاستماع إلى الاتصالات والحزم على منفذ معين. هذا يتيح لنا إمكانية ربط مثيلين من Netcat في علاقة خادم-عميل.
إن التمييز بين جهازي الخادم والعميل هو أمرٌ مهمٌّ فقط أثناء التهيئة الأولية. بمجرد إنشاء الاتصال، يكون الاتصال متماثلًا تمامًا في كلا الاتجاهين.
على جهاز، يمكنك توجيه netcat للاستماع إلى الاتصالات على منفذ محدد. يمكننا القيام بذلك بتوفير المعلمة -l واختيار المنفذ:
netcat -l 4444يخبر هذا Netcat بالاستماع إلى اتصالات TCP على المنفذ 4444. باعتبارك مستخدمًا عاديًا (غير جذر)، لا يمكنك فتح المنافذ الأقل من 1000 كإجراء أمني.
على الخادم الثاني، يمكننا الاتصال بالجهاز الأول على رقم المنفذ الذي اخترناه. نفعل ذلك بنفس طريقة الاتصال السابقة:
netcat domain.com 4444سيبدو الأمر كما لو لم يحدث شيء. مع ذلك، يمكنك الآن إرسال الرسائل على جانبي الاتصال، وستكون مرئيةً على كلا الجانبين.
اكتب رسالة واضغط على زر الإدخال. ستظهر الرسالة على الشاشتين المحلية والبعيدة. يعمل هذا بشكل معاكس أيضًا.
عند الانتهاء من إرسال الرسالة، يمكنك الضغط على CTRL-D لإغلاق اتصال TCP.
كيفية إرسال الملفات عبر Netcat
باستخدام المثال السابق، يمكننا القيام بأمور أكثر فائدة. بما أننا ننشئ اتصال TCP عاديًا، يمكننا نقل أي نوع من البيانات تقريبًا عبره. لا يقتصر هذا على رسائل الدردشة التي يكتبها المستخدم، بل يمكننا استخدام هذه المعرفة لتحويل netcat إلى برنامج نقل ملفات.
مرة أخرى، نحتاج إلى اختيار نقطة اتصال للاستماع إلى الاتصالات. ولكن، بدلاً من طباعة المعلومات على الشاشة، كما فعلنا في المثال السابق، سنضع جميع المعلومات مباشرةً في ملف:
netcat -l 4444 > الملف المستلميقوم هذا الأمر بإعادة توجيه كافة مخرجات netcat إلى اسم الملف المحدد.
على الكمبيوتر الثاني، قم بإنشاء ملف نصي بسيط عن طريق كتابة:
echo "مرحبا، هذا ملف" > original_fileيمكننا الآن استخدام هذا الملف كمدخل لاتصال netcat الذي نُنشئه مع جهاز الكمبيوتر المُستمع. سيتم نقل الملف أثناء كتابته تفاعليًا:
netcat domain.com 4444 < الملف الأصلييمكننا أن نرى على الكمبيوتر الذي كان ينتظر الاتصال أن لدينا الآن ملفًا جديدًا يسمى receive_file مع محتويات الملف الذي كتبناه على الكمبيوتر الآخر:
القطة استلمت الملفالإخراج مرحبًا، هذا ملفكما ترى، بربط الكائنات، يُمكننا بسهولة استخدام هذا الاتصال لنقل مختلف أنواع البيانات. على سبيل المثال، يُمكننا نقل محتويات مجلد كامل بإنشاء ملف مضغوط بدون اسم، ونقله إلى النظام البعيد، ثم فك ضغطه في المجلد البعيد.
في نهاية التنزيل، يمكننا أن نتوقع ملفًا يجب فك ضغطه وفتحه عن طريق كتابة:
netcat -l 4444 | tar xzvf -تشير الشرطة اللاحقة (-) إلى أن tar يعمل على الإدخال القياسي، والذي يتم توجيهه عبر الشبكة عند إنشاء اتصال من netcat.
إلى جانب محتويات الدليل الذي نريد نقله، يمكننا حزمها في ملف tarball ثم إرسالها إلى الكمبيوتر البعيد عبر netcat:
القطران -czf - * | نطاق netcat.com 4444هذه المرة، تعني الشرطة في أمر tar ضغط محتويات المجلد الحالي (كما هو موضح بعلامة *)، وكتابة النتيجة كمخرج قياسي. بعد ذلك، تُكتب مباشرةً عبر اتصال TCP، الذي يُستقبل على الطرف الآخر ويُفك ضغطه في المجلد الحالي للحاسوب البعيد. هذا مجرد مثال واحد على عملية نقل بيانات أكثر تعقيدًا من حاسوب إلى آخر. ومن الأفكار الشائعة الأخرى استخدام أمر dd لالتقاط صورة من أحد جانبي القرص ونقلها إلى حاسوب بعيد. مع ذلك، لن نتطرق إلى ذلك هنا.
كيفية استخدام Netcat كخادم ويب بسيط
لقد قمنا بتكوين netcat للاستماع إلى الاتصالات للتواصل ونقل الملفات. يمكننا استخدام المفهوم نفسه لاستخدام netcat كخادم ويب بسيط للغاية. يمكن أن يكون هذا مفيدًا لاختبار الصفحات التي تُنشئها.
أولاً، دعنا ننشئ ملف HTML بسيطًا على الخادم:
nano index.htmlفيما يلي بعض HTML البسيطة التي يمكنك استخدامها في ملفك:
<html>
<head>
<title>صفحة الاختبار</title>
</head>
<body>
<h1>رأس المستوى 1</h1>
<h2>العنوان الفرعي</h2>
<p>النص العادي هنا</p>
</body>
</html>احفظ الملف وأغلقه.
بدون امتيازات الجذر، لا يمكنك تقديم هذا الملف على منفذ الويب الافتراضي، المنفذ 80. يمكننا اختيار المنفذ 8888 كمستخدم عادي.
إذا كنت تريد فقط تقديم هذه الصفحة مرة واحدة للتحقق من كيفية عرضها، فيمكنك تشغيل الأمر التالي:
printf 'HTTP/1.1 200 OK\n\n%s' "$(cat index.html)" | netcat -l 8888الآن، يمكنك الوصول إلى المحتوى في متصفحك من خلال زيارة:
http://server_IP:8888
يؤدي هذا إلى عرض الصفحة، ثم يُقطع اتصال netcat. إذا حاولت إعادة تحميل الصفحة، فسيتم فقدها.
يمكننا جعل netcat يعرض الصفحة بشكل غير محدد عن طريق وضع الأمر الأخير في حلقة لا نهائية، مثل هذا:
بينما صحيح؛ قم بطباعة 'HTTP/1.1 200 OK\n\n%s' "$(cat index.html)" | netcat -l 8888؛ تمهذا يسمح له بمواصلة قبول الاتصالات بعد إغلاق الاتصال الأول. يمكننا إيقاف الحلقة بالضغط على CTRL-C على الخادم. يتيح لك هذا رؤية كيفية عرض الصفحة في المتصفح، ولكنه لا يُحسّن الأداء كثيرًا. لا يجب عليك استخدام هذا لعرض مواقع الويب الحقيقية. لا يوجد أمان، وحتى الأشياء البسيطة كالروابط لن تعمل بشكل صحيح.
نتيجة
الآن، يجب أن تكون لديك فكرة جيدة عن استخدامات Netcat. إنها أداة متعددة الاستخدامات تُفيد في تشخيص المشكلات والتأكد من عمل وظائفها الأساسية بشكل صحيح مع اتصالات TCP/UDP. باستخدام Netcat، يمكنك بسهولة إنشاء اتصالات بين أجهزة كمبيوتر مختلفة للتفاعل السريع. يسعى Netcat إلى جعل تفاعلات الشبكة بين أجهزة الكمبيوتر شفافة من خلال تبسيط عملية إنشاء الاتصالات.










