Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
modbus-scanner — # ماسح كشف Modbus/TCP متعدد الخيوط مكتوب بلغة C باستخدام libmodbus. | Kitploit
أدوات/GitHubGitHub/k3ystr0k3r/modbus-scanner
ماسحات الثغرات الأمنيةتخطيط الشبكةمسح المنافذأمن SCADA/ICSجمع المعلوماتأمن الشبكات
GitHubk3ystr0k3r/modbus-scanner

modbus-scanner

# ماسح كشف Modbus/TCP متعدد الخيوط مكتوب بلغة C باستخدام libmodbus.

عرض المستودع
5منذ 2 أياملم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

ماسح كشف Modbus

ماسح C متعدد الخيوط لكشف خدمات Modbus/TCP باستخدام libmodbus.

لا يعتمد الماسح فقط على فتح منفذ TCP 502. بدلاً من ذلك، يقوم بإنشاء اتصال Modbus/TCP وإرسال طلب Modbus على مستوى طبقة التطبيق. تُستخدم استجابة Modbus الصالحة كمؤشر أساسي على وجود خدمة Modbus.


Modbus/TCP

Modbus هو بروتوكول اتصالات صناعي يُستخدم بشكل شائع بواسطة PLCs وRTUs وHMIs وأنظمة SCADA وأجهزة الاستشعار والعدادات والأجهزة الصناعية الأخرى.

ينقل Modbus/TCP بروتوكول تطبيق Modbus عبر TCP.

منفذ Modbus/TCP القياسي هو:

root@kitploit:~
TCP/502

تدفق الاتصال النموذجي هو:

root@kitploit:~
Scanner
   |
   | TCP connection → 502
   |
   | Modbus/TCP request
   v
Modbus Device
   |
   | Modbus/TCP response
   v
Scanner

على عكس البروتوكولات التي توفر لافتة (banner) فور الاتصال، يتطلب Modbus/TCP عمومًا أن يرسل العميل طلب Modbus صالحًا قبل أن ينتج الجهاز استجابة على مستوى طبقة التطبيق.


طريقة الكشف

يقوم الماسح بالكشف على مرحلتين.

1. اتصال TCP

يحاول الماسح إنشاء اتصال TCP إلى:

root@kitploit:~
<target>:502

إذا تعذر إنشاء الاتصال، يُعتبر الهدف غير مستجيب لـ Modbus/TCP.

ومع ذلك، فإن فتح منفذ TCP/502 بحد ذاته لا يُعتبر دليلاً كافياً على وجود Modbus.

2. فحص طبقة تطبيق Modbus

بعد الاتصال، يرسل الماسح طلب Modbus باستخدام libmodbus.

الفحص الأساسي هو:

root@kitploit:~
modbus_read_input_registers(ctx, 0, 1, &reg);

يُنتج هذا رمز دالة Modbus:

root@kitploit:~
0x04 - Read Input Registers

يطلب الطلب من الهدف سجل إدخال واحد يبدأ من العنوان 0.

إذا أعاد الهدف استجابة Modbus صالحة، يعتبر الماسح أن الخدمة مكتشفة.


بنية حزمة Modbus/TCP

تتكون حزمة Modbus/TCP من:

root@kitploit:~
+----------------------+----------------------+
| MBAP Header          | PDU                  |
+----------------------+----------------------+

MBAP Header:
+------------------+
| Transaction ID   | 2 bytes
| Protocol ID      | 2 bytes
| Length           | 2 bytes
| Unit Identifier  | 1 byte
+------------------+

PDU:
+------------------+
| Function Code    | 1 byte
| Data             | N bytes
+------------------+

رأس MBAP خاص بـ Modbus/TCP.


حزمة الكشف الأساسية

يستخدم الفحص الأول للماسح رمز الدالة 0x04.

طلب تمثيلي هو:

root@kitploit:~
00 01 00 00 00 06 01 04 00 00 00 01

تقسيم هذا الطلب:

root@kitploit:~
00 01        Transaction Identifier
00 00        Protocol Identifier
00 06        Length
01           Unit Identifier
04           Function Code
00 00        Starting Address
00 01        Quantity

معرّف المعاملة (Transaction Identifier)

root@kitploit:~
00 01

يحدد المعاملة.

يمكن أن تختلف القيمة لأن معرّف المعاملة يُدار عادةً بواسطة مكتبة عميل Modbus.

معرّف البروتوكول (Protocol Identifier)

root@kitploit:~
00 00

قيمة 0 تحدد Modbus.

الطول (Length)

root@kitploit:~
00 06

يحدد عدد البايتات التالية لحقل الطول.

معرّف الوحدة (Unit Identifier)

root@kitploit:~
01

يحدد وحدة Modbus المستهدفة.

رمز الدالة (Function Code)

root@kitploit:~
04

رمز الدالة 0x04 يعني:

root@kitploit:~
Read Input Registers

عنوان البداية (Starting Address)

root@kitploit:~
00 00

يبدأ الماسح من عنوان السجل 0.

الكمية (Quantity)

root@kitploit:~
00 01

يطلب الماسح سجلاً واحدًا.


الاستجابة المتوقعة

تحتوي الاستجابة الناجحة للطلب على رمز الدالة 0x04 وبيانات السجل المطلوبة.

استجابة تمثيلية قد تبدو كالتالي:

root@kitploit:~
00 01 00 00 00 05 01 04 02 00 00

تقسيمها:

root@kitploit:~
00 01        Transaction Identifier
00 00        Protocol Identifier
00 05        Length
01           Unit Identifier
04           Function Code
02           Byte Count
00 00        Register Value

الجزء المهم للكشف هو أن الهدف يعالج طلب Modbus بنجاح ويعيد استجابة Modbus صالحة على مستوى طبقة التطبيق.

قيمة السجل الفعلية تعتمد على الجهاز.


لماذا منفذ 502 وحده غير كافٍ

مجرد التحقق من:

root@kitploit:~
TCP/502 = OPEN

لا يثبت بالضرورة أن الخدمة هي Modbus.

أرقام المنافذ هي اصطلاحات. يمكن لتطبيق مختلف الاستماع على TCP/502، وقد يتصرف جهاز Modbus بشكل مختلف اعتمادًا على تكوينه.

لذلك يستخدم الماسح:

root@kitploit:~
TCP connectivity
        +
Modbus protocol response
        =
Modbus detection

هذا يجعل الكشف على مستوى طبقة التطبيق أكثر معنى من مجرد فحص المنافذ.


كشف احتياطي

قد لا تستجيب بعض الأجهزة لطلب 0x04 الأولي بسبب تكوين سجلاتها أو رموز الدوال المدعومة.

لذلك يحاول الماسح طلبًا ثانيًا إذا فشل الأول:

root@kitploit:~
modbus_read_bits(ctx, 0, 1, bits);

يستخدم هذا رمز الدالة:

root@kitploit:~
0x01 - Read Coils

طلب تمثيلي هو:

root@kitploit:~
00 02 00 00 00 06 01 01 00 00 00 01

التقسيم:

root@kitploit:~
00 02        Transaction Identifier
00 00        Protocol Identifier
00 06        Length
01           Unit Identifier
01           Function Code
00 00        Starting Address
00 01        Quantity

يعتبر الماسح الهدف مكتشفًا عندما تتلقى أي من عمليتي Modbus استجابة ناجحة.


تدفق الكشف

root@kitploit:~
             Target IP
                 |
                 v
          TCP connection
             port 502
                 |
          +------+------+
          |             |
        Failed       Connected
          |             |
          v             v
       Ignore      Function 0x04
                        |
                 +------+------+
                 |             |
               Valid         Failed
                 |             |
                 v             v
            MODBUS FOUND   Function 0x01
                               |
                        +------+------+
                        |             |
                      Valid         Failed
                        |             |
                        v             v
                   MODBUS FOUND    No detection

التنفيذ

يستخدم الماسح libmodbus لبناء وتحليل حزم Modbus/TCP بدلاً من بناء إطارات البروتوكول يدويًا.

العملية الأساسية هي:

root@kitploit:~
modbus_read_input_registers(ctx, 0, 1, &reg);

إذا فشلت هذه:

root@kitploit:~
modbus_read_bits(ctx, 0, 1, bits);

ثم يُغلق الاتصال ويُحرر سياق libmodbus.

هذا يُبقي معالجة البروتوكول داخل مكتبة Modbus بينما يتعامل الماسح مع:

  • تعداد الأهداف
  • الخيوط (Threading)
  • إدارة الاتصالات
  • الكشف
  • تتبع التقدم
  • تسجيل النتائج

المهلات الزمنية (Timeouts)

يستخدم الماسح مهلات زمنية قصيرة للاتصال والاستجابة:

root@kitploit:~
#define TIMEOUT_SEC 2

هذا يمنع مضيفًا واحدًا غير قابل للوصول أو غير مستجيب من حجب عامل (worker) لفترة زمنية مفرطة.

يمكن أن تحتوي الشبكات الصناعية على أجهزة ذات استجابات بطيئة نسبيًا، لذلك قد تحتاج قيم المهلة إلى التعديل اعتمادًا على البيئة.


تعدد الخيوط (Multithreading)

يتم تقسيم الأهداف بين عدة خيوط عاملة.

على سبيل المثال:

root@kitploit:~
Thread 1 → targets 1–64
Thread 2 → targets 65–128
Thread 3 → targets 129–192
Thread 4 → targets 193–254

يحاول كل عامل بشكل مستقل كشف Modbus/TCP.

هذا يسمح باختبار مضيفين متعددين بشكل متزامن بدلاً من الانتظار لكل هدف بالتسلسل.


اعتبارات الكشف المهمة

النتيجة الإيجابية تعني أن الهدف استجاب بنجاح لطلب Modbus يفهمه الماسح.

لا تحدد بالضرورة:

  • الشركة المصنعة للجهاز
  • طراز الجهاز
  • إصدار البرنامج الثابت (Firmware)
  • برنامج PLC
  • محتويات السجلات
  • ما إذا كان الجهاز عرضة للثغرات

تلك مهام منفصلة لتحديد البصمة (fingerprinting) أو التقييم.

الماسح هو في الأساس أداة كشف خدمة Modbus/TCP.


القيود

طريقة الكشف متحفظة عمدًا.

قد يكون الجهاز قادرًا على Modbus لكنه يفشل في الكشف إذا:

  • تمت تصفية TCP/502
  • قام جدار حماية بحظر الطلب
  • يتطلب الجهاز معرّف وحدة مختلفًا
  • رمز الدالة المطلوب غير مدعوم
  • لا يعرض الجهاز العنوان المطلوب
  • الجهاز غير متاح مؤقتًا
  • يتجاوز زمن استجابة الشبكة المهلة المكوّنة

لذلك:

root@kitploit:~
No response ≠ Definitively not Modbus

يعني أن الماسح لم يتمكن من الحصول على استجابة ناجحة باستخدام الفحوصات التي حاولها.


البناء (Build)

قم بتثبيت التبعيات المطلوبة وقم بالتجميع باستخدام:

root@kitploit:~
make

أو مباشرة:

root@kitploit:~
gcc -Wall -Wextra -O2 -o modbus modbus.c -lmodbus -lpthread

التشغيل:

root@kitploit:~
./modbus -i 192.168.1.0 -s /24 -t 10 -o results.txt

مثال:

root@kitploit:~
[+] Modbus detected: 192.168.1.20:502
[+] Modbus detected: 192.168.1.42:502

[+] Scanned: 254 | Found: 2 Modbus
[+] Results saved to: results.txt

الملخص

يكتشف الماسح خدمات Modbus/TCP من خلال إجراء تفاعل فعلي مع البروتوكول بدلاً من الاعتماد حصريًا على كشف منفذ TCP.

عملية الكشف هي:

root@kitploit:~
Connect to TCP/502
        ↓
Send Modbus Function Code 0x04
        ↓
Receive valid Modbus response?
        ↓
      YES → Modbus detected
        |
       NO
        ↓
Send Modbus Function Code 0x01
        ↓
Receive valid Modbus response?
        ↓
      YES → Modbus detected
        |
       NO
        ↓
   No detection

المبدأ الأساسي بسيط:

اكتشف البروتوكول، وليس المنفذ فقط.

تنزيل الأداة