
BOF (Boiboite Opener Framework) औद्योगिक प्रोटोकॉल कार्यान्वयन और उपकरणों के लिए एक परीक्षण फ्रेमवर्क है।
BOF (Boiboite Opener Framework) फील्ड प्रोटोकॉल कार्यान्वयन और उपकरणों के लिए एक परीक्षण ढांचा है। यह एक Python 3.6+ लाइब्रेरी है जो समर्थित प्रोटोकॉल से फ्रेम भेजने, प्राप्त करने, बनाने, पार्स करने और हेरफेर करने के साधन प्रदान करती है।
यह लाइब्रेरी वर्तमान में KNXnet/IP के लिए डिस्कवरी और विस्तारित परीक्षण सुविधाएँ प्रदान करती है, जो हमारा फोकस है, लेकिन इसे अन्य प्रकार के BMS या औद्योगिक नेटवर्क प्रोटोकॉल तक बढ़ाया जा सकता है। यह KNXnet/IP, LLDP, Profinet DCP और Modbus TCP पर आधारित औद्योगिक नेटवर्क के लिए मल्टीकास्ट और/या एंड-टू-एंड डिस्कवरी फ़ंक्शन भी प्रदान करता है।
कृपया ध्यान दें कि औद्योगिक प्रणालियों को लक्षित करने से लोगों, औद्योगिक संचालन और इमारतों पर गंभीर प्रभाव पड़ सकता है और BOF का उपयोग सावधानी से किया जाना चाहिए।
pip install boiboite-opener-framework
https://pypi.org/project/boiboite-opener-framework/
git clone https://github.com/Orange-Cyberdefense/bof.git
आवश्यकताओं को इसके साथ स्थापित करें:
pip install -r requirements.txt
प्रोटोकॉल कार्यान्वयन Scapy के प्रारूप का उपयोग करते हैं।
BOF एक Python 3.6+ लाइब्रेरी है जिसे स्क्रिप्ट में आयात किया जाना चाहिए।
import bof
from bof.layers import profinet, knx
from bof.layers.knx import KnxPacket
BOF का उपयोग करने के तीन तरीके हैं, ये सभी लेयर पर निर्भर करते हुए उपलब्ध नहीं हैं:
स्वचालित: लेयर से उच्च-स्तरीय फ़ंक्शन को सीधे आयात या कॉल करें। प्रोटोकॉल के बारे में किसी ज्ञान की आवश्यकता नहीं है। उदाहरण के लिए, डिस्कवरी मॉड्यूल में कई औद्योगिक नेटवर्क प्रोटोकॉल का उपयोग करके उपकरणों की खोज करने के लिए कुछ फ़ंक्शन शामिल हैं।
मानक: रिमोट उपकरणों के साथ बातचीत करने के लिए लेयर से पैकेट तैयार करें। प्रोटोकॉल का बुनियादी ज्ञान आवश्यक है।
चंचल: पैकेट के साथ खेलें, प्रोटोकॉल का दुरुपयोग करें (हम इसके साथ उपकरणों को फ़ज़ करते हैं)। अंतिम उपयोगकर्ता को प्रोटोकॉल के विनिर्देशों में खुदाई शुरू कर देनी चाहिए।
अब आप BOF का उपयोग शुरू कर सकते हैं!
from bof.modules.discovery import *
devices = multicast_discovery(iface="eth0", verbose=True)
from bof.layers.knx import search
devices = search()
for device in devices:
print(device)
from bof.layers.knx import *
pkt = KNXPacket(type="search request")
responses = KNXnet.multicast(pkt, (KNX_MULTICAST_ADDR, KNX_PORT))
for response, _ in responses:
print(KNXPacket(response))
from bof.layers.knx import KNXnet, KNXPacket, SID
from bof import BOFNetworkError
try:
knxnet = KNXnet().connect("192.168.1.242", 3671)
pkt = KNXPacket(type=SID.description_request,
ip_address=knxnet.source_address,
port=knxnet.source_port)
pkt.show2()
response, _ = knxnet.sr(pkt)
response.show2()
except BOFNetworkError as bne:
pass
finally:
knxnet.disconnect()
from bof.layers.knx import KNXPacket, SID
from bof.layers.raw_scapy.knx import LcEMI
pkt = KNXPacket(type=SID.description_request)
pkt.ip_address = b"\x01\x01"
pkt.port = 99999 # हाँ, यह बहुत बड़ा है
pkt.append(LcEMI())
pkt.show2() # यह कुछ अजीब आउटपुट दे सकता है
एक प्राप्तकर्ता उपकरण शायद इसका जवाब नहीं देगा, लेकिन कम से कम आप जानते हैं कि BOF आपको अपने पैकेट के साथ खिलवाड़ करने से नहीं रोकेगा।
BOF प्रोटोकॉल कार्यान्वयन के लिए Scapy पर निर्भर करता है, जिसमें एक अतिरिक्त परत होती है जो BOF कोड को Scapy पैकेट और फ़ील्ड पर परिवर्तनों में अनुवादित करती है। क्यों? क्योंकि BOF Scapy के आंतरिक व्यवहार को थोड़ा संशोधित या ओवरराइड कर सकता है।
BOF का उपयोग करने के लिए आपको Scapy का उपयोग करना नहीं आना चाहिए, हालांकि यदि आप जानते हैं, तो आप सीधे Scapy पैकेट के साथ भी बातचीत करने के लिए स्वतंत्र हैं।
packet = KNXPacket(type=connect_request)
packet.field1 = 1 # अतिरिक्त BOF संचालन लागू करना (जैसे: प्रकार बदलना)
packet.scapy_pkt.field1 = 1 # Scapy Packet ऑब्जेक्ट तक सीधी पहुंच
दस्तावेज़ीकरण का लिंक: https://bof.readthedocs.io
HTML उपयोगकर्ता मैनुअल और स्रोत कोड दस्तावेज़ीकरण रिपॉजिटरी से बनाया जा सकता है:
$> cd docs && make html[path to repository]/docs/_build/html/index.html पर जाएंउदाहरण स्क्रिप्ट examples फ़ोल्डर में हैं।
योगदानकर्ताओं का स्वागत है! BOF अभी भी एक चल रही परियोजना है, जो Scapy प्रारूप में औद्योगिक नेटवर्क प्रोटोकॉल कार्यान्वयन पर निर्भर करती है। आप Scapy में योगदान देकर और नए प्रोटोकॉल ("लेयर") जोड़कर पहले योगदान कर सकते हैं। या, आप Scapy प्रोटोकॉल को BOF में एकीकृत करके योगदान कर सकते हैं। दस्तावेज़ीकरण बताता है कि इसे कैसे करना है। इसके अलावा, उच्च-स्तरीय कार्यों के लिए अभी भी जगह होगी जो परीक्षणों को आसान बनाएंगे या प्रोटोकॉल या प्रोटोकॉल कार्यान्वयन के खिलाफ ज्ञात हमलों को लागू करेंगे।
पहले से जानने योग्य कुछ बातें:
हम स्वच्छ कोड पसंद करते हैं और उम्मीद करते हैं कि योगदान यथासंभव PEP-8 के अनुरूप हों (भले ही हम इसके लिए परीक्षण न करें)। नए कोड को आसानी से पढ़ने योग्य और रखरखाव योग्य होना चाहिए। और याद रखें: यदि आपको यह समझाने के लिए "और" का उपयोग करना पड़ता है कि आपका फ़ंक्शन क्या करता है, तो आप शायद इसे विभाजित कर सकते हैं।
कृपया यूनिट परीक्षण लिखें और सुनिश्चित करें कि मौजूदा परीक्षण अभी भी पास हों! वे tests/ में हैं। आप सभी यूनिट परीक्षण इसके साथ चला सकते हैं: python -m unittest discover -s tests
GitHub के साथ एक मुद्दा सबमिट करके बग की रिपोर्ट करें, प्रश्न पूछें या लापता दस्तावेज़ीकरण और नई सुविधाओं का अनुरोध करें। बग के लिए, कृपया अपनी समस्या का यथासंभव स्पष्ट रूप से वर्णन करें।
| स्वचालित | मानक | चंचल |
|---|
| KNX | X | X | X |
| LLDP | X | ||
| Modbus | X | X | X |
| Profinet DCP | X |