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 का उपयोग करके लिखा गया है।

रिपॉजिटरी देखें
52 दिन पहलेअभी तक समीक्षित नहीं

सबसे लोकप्रिय

सभी देखें →

हमारे समुदाय द्वारा सबसे अधिक उपयोग किए जाने वाले उपकरण खोजें।

सभी उपकरण खोजें

हमारे उपकरणों का संग्रह ब्राउज़ करें

सभी उपकरण देखें →
साझा करें

मॉडबस डिटेक्शन स्कैनर

libmodbus का उपयोग करके Modbus/TCP सेवाओं का पता लगाने के लिए एक मल्टीथ्रेडेड C स्कैनर।

स्कैनर केवल TCP पोर्ट 502 के खुले होने पर निर्भर नहीं करता। इसके बजाय, यह एक Modbus/TCP कनेक्शन स्थापित करता है और एक एप्लिकेशन-लेयर Modbus अनुरोध भेजता है। एक वैध Modbus प्रतिक्रिया को Modbus सेवा की उपस्थिति का प्राथमिक संकेतक माना जाता है।


Modbus/TCP

Modbus एक औद्योगिक संचार प्रोटोकॉल है जो आमतौर पर PLC, RTU, HMI, SCADA सिस्टम, सेंसर, मीटर और अन्य औद्योगिक उपकरणों द्वारा उपयोग किया जाता है।

Modbus/TCP Modbus एप्लिकेशन प्रोटोकॉल को TCP पर परिवहन करता है।

मानक Modbus/TCP पोर्ट है:

root@kitploit:~
TCP/502

एक सामान्य संचार प्रवाह इस प्रकार है:

root@kitploit:~
स्कैनर
   |
   | TCP कनेक्शन → 502
   |
   | Modbus/TCP अनुरोध
   v
Modbus डिवाइस
   |
   | Modbus/TCP प्रतिक्रिया
   v
स्कैनर

उन प्रोटोकॉल के विपरीत जो कनेक्ट होने के तुरंत बाद एक बैनर प्रदान करते हैं, Modbus/TCP को आम तौर पर डिवाइस से एप्लिकेशन-लेयर प्रतिक्रिया उत्पन्न करने से पहले क्लाइंट को एक वैध Modbus अनुरोध भेजने की आवश्यकता होती है।


डिटेक्शन विधि

स्कैनर दो चरणों में डिटेक्शन करता है।

1. TCP कनेक्शन

स्कैनर निम्नलिखित के लिए TCP कनेक्शन स्थापित करने का प्रयास करता है:

root@kitploit:~
<लक्ष्य>:502

यदि कनेक्शन स्थापित नहीं किया जा सकता है, तो लक्ष्य को Modbus/TCP पर प्रतिक्रिया नहीं देने वाला माना जाता है।

हालाँकि, अकेले एक खुला TCP/502 पोर्ट Modbus का पर्याप्त प्रमाण नहीं माना जाता।

2. Modbus एप्लिकेशन-लेयर प्रोब

कनेक्ट होने के बाद, स्कैनर libmodbus का उपयोग करके एक Modbus अनुरोध भेजता है।

प्राथमिक प्रोब है:

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 हेडर           | PDU                  |
+----------------------+----------------------+

MBAP हेडर:
+------------------+
| ट्रांज़ैक्शन आईडी | 2 बाइट्स
| प्रोटोकॉल आईडी   | 2 बाइट्स
| लंबाई            | 2 बाइट्स
| यूनिट पहचानकर्ता  | 1 बाइट
+------------------+

PDU:
+------------------+
| फंक्शन कोड      | 1 बाइट
| डेटा             | N बाइट्स
+------------------+

MBAP हेडर Modbus/TCP के लिए विशिष्ट है।


प्राथमिक डिटेक्शन पैकेट

स्कैनर का पहला प्रोब फंक्शन कोड 0x04 का उपयोग करता है।

एक प्रतिनिधि अनुरोध है:

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

इसे विभाजित करने पर:

root@kitploit:~
00 01        ट्रांज़ैक्शन आइडेंटिफ़ायर
00 00        प्रोटोकॉल आइडेंटिफ़ायर
00 06        लंबाई
01           यूनिट आइडेंटिफ़ायर
04           फंक्शन कोड
00 00        प्रारंभिक पता
00 01        मात्रा

ट्रांज़ैक्शन आइडेंटिफ़ायर

root@kitploit:~
00 01

ट्रांज़ैक्शन की पहचान करता है।

मान भिन्न हो सकता है क्योंकि ट्रांज़ैक्शन आइडेंटिफ़ायर सामान्यतः Modbus क्लाइंट लाइब्रेरी द्वारा प्रबंधित किया जाता है।

प्रोटोकॉल आइडेंटिफ़ायर

root@kitploit:~
00 00

मान 0 Modbus की पहचान करता है।

लंबाई

root@kitploit:~
00 06

लंबाई फ़ील्ड के बाद आने वाले बाइट्स की संख्या निर्दिष्ट करता है।

यूनिट आइडेंटिफ़ायर

root@kitploit:~
01

लक्ष्य Modbus यूनिट की पहचान करता है।

फंक्शन कोड

root@kitploit:~
04

फंक्शन कोड 0x04 का अर्थ है:

root@kitploit:~
Read Input Registers

प्रारंभिक पता

root@kitploit:~
00 00

स्कैनर रजिस्टर पते 0 से शुरू करता है।

मात्रा

root@kitploit:~
00 01

स्कैनर एक रजिस्टर का अनुरोध करता है।


अपेक्षित प्रतिक्रिया

अनुरोध की एक सफल प्रतिक्रिया में फंक्शन कोड 0x04 और अनुरोधित रजिस्टर डेटा होता है।

एक प्रतिनिधि प्रतिक्रिया इस प्रकार दिख सकती है:

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

इसे विभाजित करने पर:

root@kitploit:~
00 01        ट्रांज़ैक्शन आइडेंटिफ़ायर
00 00        प्रोटोकॉल आइडेंटिफ़ायर
00 05        लंबाई
01           यूनिट आइडेंटिफ़ायर
04           फंक्शन कोड
02           बाइट गणना
00 00        रजिस्टर मान

डिटेक्शन के लिए महत्वपूर्ण हिस्सा यह है कि लक्ष्य Modbus अनुरोध को सफलतापूर्वक संसाधित करता है और एक वैध Modbus एप्लिकेशन-लेयर प्रतिक्रिया लौटाता है।

वास्तविक रजिस्टर मान डिवाइस पर निर्भर करता है।


अकेले पोर्ट 502 पर्याप्त क्यों नहीं है

केवल जाँच करना:

root@kitploit:~
TCP/502 = OPEN

यह आवश्यक रूप से यह साबित नहीं करता कि सेवा Modbus है।

पोर्ट नंबर परंपराएँ हैं। एक अलग एप्लिकेशन TCP/502 पर सुन सकता है, और एक Modbus डिवाइस अपने कॉन्फ़िगरेशन के आधार पर अलग व्यवहार भी कर सकता है।

इसलिए स्कैनर उपयोग करता है:

root@kitploit:~
TCP कनेक्टिविटी
        +
Modbus प्रोटोकॉल प्रतिक्रिया
        =
Modbus डिटेक्शन

यह एप्लिकेशन-लेयर डिटेक्शन को एक साधारण पोर्ट स्कैन से अधिक सार्थक बनाता है।


फ़ॉलबैक डिटेक्शन

कुछ डिवाइस अपने रजिस्टर कॉन्फ़िगरेशन या समर्थित फंक्शन कोड के कारण प्रारंभिक 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        ट्रांज़ैक्शन आइडेंटिफ़ायर
00 00        प्रोटोकॉल आइडेंटिफ़ायर
00 06        लंबाई
01           यूनिट आइडेंटिफ़ायर
01           फंक्शन कोड
00 00        प्रारंभिक पता
00 01        मात्रा

स्कैनर लक्ष्य का पता तब लगा हुआ मानता है जब कोई भी Modbus ऑपरेशन सफल प्रतिक्रिया प्राप्त करता है।


डिटेक्शन प्रवाह

root@kitploit:~
             लक्ष्य IP
                 |
                 v
          TCP कनेक्शन
             पोर्ट 502
                 |
          +------+------+
          |             |
        विफल        कनेक्टेड
          |             |
          v             v
       अनदेखा करें      फंक्शन 0x04
                        |
                 +------+------+
                 |             |
               वैध          विफल
                 |             |
                 v             v
            MODBUS मिला    फंक्शन 0x01
                               |
                        +------+------+
                        |             |
                      वैध          विफल
                        |             |
                        v             v
                   MODBUS मिला    कोई डिटेक्शन नहीं

कार्यान्वयन

स्कैनर मैन्युअल रूप से प्रोटोकॉल फ्रेम बनाने के बजाय Modbus/TCP पैकेट बनाने और पार्स करने के लिए libmodbus का उपयोग करता है।

प्राथमिक ऑपरेशन है:

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

यदि यह विफल होता है:

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

फिर कनेक्शन बंद कर दिया जाता है और libmodbus संदर्भ मुक्त कर दिया जाता है।

यह प्रोटोकॉल हैंडलिंग को Modbus लाइब्रेरी के भीतर रखता है जबकि स्कैनर निम्न को संभालता है:

  • लक्ष्य गणना
  • थ्रेडिंग
  • कनेक्शन प्रबंधन
  • डिटेक्शन
  • प्रगति ट्रैकिंग
  • परिणाम लॉगिंग

टाइमआउट

स्कैनर छोटे कनेक्शन और प्रतिक्रिया टाइमआउट का उपयोग करता है:

root@kitploit:~
#define TIMEOUT_SEC 2

यह एक अकेले अप्राप्य या अनुत्तरदायी होस्ट को एक वर्कर को अत्यधिक समय के लिए अवरुद्ध करने से रोकता है।

औद्योगिक नेटवर्क में अपेक्षाकृत धीमी प्रतिक्रिया वाले डिवाइस हो सकते हैं, इसलिए पर्यावरण के आधार पर टाइमआउट मानों को समायोजित करने की आवश्यकता हो सकती है।


मल्टीथ्रेडिंग

लक्ष्य कई वर्कर थ्रेड्स के बीच विभाजित होते हैं।

उदाहरण के लिए:

root@kitploit:~
थ्रेड 1 → लक्ष्य 1–64
थ्रेड 2 → लक्ष्य 65–128
थ्रेड 3 → लक्ष्य 129–192
थ्रेड 4 → लक्ष्य 193–254

प्रत्येक वर्कर स्वतंत्र रूप से Modbus/TCP डिटेक्शन का प्रयास करता है।

यह प्रत्येक लक्ष्य के लिए अनुक्रमिक रूप से प्रतीक्षा करने के बजाय कई होस्टों का एक साथ परीक्षण करने की अनुमति देता है।


महत्वपूर्ण डिटेक्शन विचार

एक सकारात्मक परिणाम का अर्थ है कि लक्ष्य ने स्कैनर द्वारा समझे गए Modbus अनुरोध का सफलतापूर्वक जवाब दिया।

यह आवश्यक रूप से नहीं पहचानता:

  • डिवाइस निर्माता
  • डिवाइस मॉडल
  • फर्मवेयर संस्करण
  • PLC प्रोग्राम
  • रजिस्टर सामग्री
  • क्या डिवाइस कमजोर है

वे अलग फ़िंगरप्रिंटिंग या मूल्यांकन कार्य हैं।

स्कैनर मुख्य रूप से एक Modbus/TCP सेवा डिटेक्शन टूल है।


सीमाएँ

डिटेक्शन विधि जानबूझकर रूढ़िवादी है।

एक डिवाइस Modbus-सक्षम हो सकता है लेकिन डिटेक्शन में विफल हो सकता है यदि:

  • TCP/502 फ़िल्टर किया गया है
  • एक फ़ायरवॉल अनुरोध को ब्लॉक करता है
  • डिवाइस को एक अलग यूनिट आईडी की आवश्यकता होती है
  • अनुरोधित फंक्शन कोड असमर्थित है
  • डिवाइस अनुरोधित पते को उजागर नहीं करता है
  • डिवाइस अस्थायी रूप से अनुपलब्ध है
  • नेटवर्क विलंबता कॉन्फ़िगर किए गए टाइमआउट से अधिक है

इसलिए:

root@kitploit:~
कोई प्रतिक्रिया नहीं ≠ निश्चित रूप से Modbus नहीं

इसका अर्थ है कि स्कैनर अपने द्वारा प्रयास किए गए प्रोब का उपयोग करके सफल प्रतिक्रिया प्राप्त नहीं कर सका।


बिल्ड

आवश्यक निर्भरताएँ स्थापित करें और संकलित करें:

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

सारांश

स्कैनर केवल TCP पोर्ट डिटेक्शन पर निर्भर रहने के बजाय वास्तविक प्रोटोकॉल इंटरैक्शन करके Modbus/TCP सेवाओं का पता लगाता है।

डिटेक्शन प्रक्रिया है:

root@kitploit:~
TCP/502 से कनेक्ट करें
        ↓
Modbus फंक्शन कोड 0x04 भेजें
        ↓
वैध Modbus प्रतिक्रिया प्राप्त करें?
        ↓
      हाँ → Modbus detected
        |
       नहीं
        ↓
Modbus फंक्शन कोड 0x01 भेजें
        ↓
वैध Modbus प्रतिक्रिया प्राप्त करें?
        ↓
      हाँ → Modbus detected
        |
       नहीं
        ↓
   कोई डिटेक्शन नहीं

मुख्य सिद्धांत सरल है:

प्रोटोकॉल का पता लगाएं, केवल पोर्ट का नहीं।

टूल डाउनलोड करें