
nOBEX allows emulating the PBAP, MAP, and HFP profiles to test vehicle infotainment systems and similar devices using these profiles
nOBEX PBAP, MAP, और HFP प्रोफ़ाइलों का अनुकरण करने की अनुमति देता है, ताकि वाहन इन्फोटेनमेंट सिस्टम और इन प्रोफ़ाइलों का उपयोग करने वाले समान उपकरणों का परीक्षण किया जा सके। nOBEX वास्तविक फोन से इन प्रोफ़ाइलों के लिए प्रामाणिक आभासी फाइलसिस्टम को क्लोन करने के लिए PBAP और MAP क्लाइंट प्रदान करता है। इसका मतलब है पूरी फोन बुक और सभी टेक्स्ट संदेश डाउनलोड करना। कच्चे vcards, XML सूचियाँ, और MAP BMSG संरचनाएँ संग्रहीत की जाती हैं, और नकारात्मक परीक्षण के लिए इच्छानुसार संशोधित की जा सकती हैं। nOBEX फिर PBAP और MAP सर्वर के रूप में कार्य कर सकता है, जिससे वाहनों और अन्य उपकरणों को इससे कनेक्ट होकर फोन बुक और संदेश जानकारी प्राप्त करने की सुविधा मिलती है। Vcards, BMSGs, और XML सूचियाँ बिल्कुल वैसी ही भेजी जाती हैं जैसी सहेजी गई थीं, जिससे उपयोगकर्ता द्वारा संशोधित दोषपूर्ण डेटा को भी पारित होने दिया जाता है। चूँकि अधिकांश वाहन हेड यूनिट्स को PBAP और MAP का उपयोग करने से पहले HFP समर्थन की आवश्यकता होती है, nOBEX HFP के लिए बुनियादी समर्थन भी प्रदान करता है। यह वाहन की हेड यूनिट से आने वाले AT कमांड्स के लिए उपयोगकर्ता-अनुकूलन योग्य पूर्वनिर्धारित प्रतिक्रियाएँ वापस भेजता है। यह एक वास्तविक सेल फोन की नकल करने की अनुमति देता है।
nOBEX David Boddie द्वारा PyOBEX प्रोजेक्ट के ऊपर बनाया गया है। OBEX को सुलभ और आसान बनाने के लिए David के महान प्रयासों के बिना यह टूल संभव नहीं होता। nOBEX PyOBEX को बड़े मल्टी-पार्ट OBEX संदेशों, HFP अनुकरण, PBAP और MAP सर्वर, एक MAP क्लाइंट, और बेहतर PBAP क्लाइंट के लिए समर्थन जोड़कर विस्तारित करता है।
nOBEX (और PyOBEX) सेवा खोज प्रोटोकॉल (SDP) पर विज्ञापन देने और RFCOMM कनेक्शन स्थापित करने के लिए BlueZ Bluetooth स्टैक का उपयोग करते हैं। nOBEX/PyOBEX में क्लाइंट और सर्वर भूमिकाओं के लिए OBEX विनिर्देश के स्टैंडअलोन कार्यान्वयन शामिल हैं। Python 2 और 3 दोनों समर्थित हैं।
क्लाइंट मोड में, nOBEX सर्वर द्वारा प्रस्तुत सेवाओं को क्वेरी करने के लिए BlueZ का उपयोग करता है। यदि यह पता लगाता है कि अनुरोधित सेवा उपलब्ध है, तो यह SDP पर निर्दिष्ट पोर्ट पर RFCOMM के माध्यम से सर्वर से कनेक्ट होता है। OBEX अनुरोध उपयोग में प्रोफ़ाइल के अनुसार बनाए और सर्वर को भेजे जाते हैं। प्रतिक्रियाओं की व्याख्या की जाती है और डिस्क पर सहेजी जाती हैं। PBAP और MAP के लिए क्लाइंट मोड वास्तविक फोन को क्लोन करने के लिए उपयोग किए जा सकते हैं।
सर्वर मोड में, nOBEX SDP पर उपलब्ध सेवाओं का विज्ञापन करता है। जब कोई क्लाइंट विज्ञापित पोर्ट पर RFCOMM कनेक्शन बनाता है, तो सर्वर OBEX अनुरोधों को स्वीकार और संभालेगा। अनुरोधों के OBEX प्रतिक्रियाएँ डिस्क पर मौजूद डेटा का उपयोग करके भेजी जाएंगी। PBAP और MAP सर्वर क्रमशः क्लाइंट द्वारा उत्पन्न फ़ाइल/फ़ोल्डर संरचनाओं से मेल खाती संरचनाएँ प्रदान करते हैं।
निम्नलिखित सेटअप निर्देश Fedora 24, 27, और 29 पर परीक्षण किए गए थे। अन्य हालिया वितरण भी काम कर सकते हैं, लेकिन अनुभव भिन्न हो सकते हैं। यदि आपका वितरण sdptool बंडल नहीं करता है, तो आपको लीगेसी bluez टूल्स (sdptool सहित) स्थापित करने की आवश्यकता हो सकती है। यह भी ध्यान रखें कि OBEX सर्वर साझा Bluetooth एडेप्टर वाली आभासी मशीनों के अंदर काम नहीं करते हैं। या तो Linux को मूल रूप से चलाएं, या एक समर्पित USB Bluetooth एडेप्टर रखें जिसका उपयोग केवल VM करे।
SDP पर विज्ञापित स्थानीय सेवाओं को जाँचने का प्रयास करें:
sudo sdptool browse local
यदि आप हालिया वितरण चला रहे हैं, तो यह संभवतः BlueZ 5 में कुछ ब्रेकिंग API परिवर्तनों के कारण विफल हो जाएगा। आप bluetoothd को कम्पैट मोड में चलाकर इसे ठीक कर सकते हैं। यह bluetoothd के लिए systemd सेवा को संपादित करके करें।
sudo vi /usr/lib/systemd/system/bluetooth.service
ExecStart पंक्ति में --compat जोड़ें:
ExecStart=/usr/libexec/bluetooth/bluetoothd --compat
अब bluetoothd को पुनः आरंभ करें:
sudo service bluetooth stop
sudo systemctl daemon-reload
sudo service bluetooth start
sudo hciconfig -a hci0 reset
स्थानीय SDP सेवाओं की ब्राउज़िंग फिर से परीक्षण करें (इस बार यह काम करना चाहिए):
sudo sdptool browse local
nOBEX प्राप्त करें और इसे स्थापित करें:
git clone https://github.com/nccgroup/nOBEX.git
cd nOBEX
sudo python3 setup.py install
उस फोन का MAC पता खोजें जिसकी फोन बुक आप क्लोन करना चाहते हैं:
hcitool scan
किसी मौजूदा फोन की PBAP सामग्री क्लोन करें (अपना सही MAC और अधिमानतः खाली या अस्तित्वहीन गंतव्य निर्देशिका का उपयोग करें):
python3 examples/pbapclient.py 5C:51:88:8A:EC:5B ~/pbap_root/
वैकल्पिक रूप से, examples/pbap_root फ़ोल्डर में स्थित PBAP नमूना डेटा ट्री का उपयोग करें।
अपने PBAP डंप निर्देशिका में vcards और सूची XML को इच्छानुसार संशोधित करें। अब क्लोन की गई फोन बुक का उपयोग करके PBAP सर्वर चलाएं:
sudo python3 examples/multiserver.py --pbap ~/pbap_root/
आपको अपने PBAP क्लाइंट को कंप्यूटर (PBAP सर्वर) के साथ पेयर करने की भी आवश्यकता होगी।
परीक्षण MAP ट्री स्थापित करने के लिए अपने फोन से संदेश डेटा खींचें:
python3 examples/mapclient.py 5C:51:88:8A:EC:5B ~/map_root/
वैकल्पिक रूप से, यदि आपका फोन MAP को ठीक से समर्थन नहीं करता है, तो examples/map_root फ़ोल्डर में स्थित MAP नमूना डेटा ट्री का उपयोग करें।
नमूना डेटा को इच्छानुसार संशोधित करें। फिर सर्वर चलाएं, यह दर्शाते हुए कि उसे MAP ट्री की जड़ कहाँ देखनी चाहिए।
sudo python3 examples/multiserver.py --map ~/map_root/
HFP क्लाइंट (हैंड्स-फ्री, कार किट एम्युलेटर) आपके HFAG (फोन/मॉडेम) से बात करने के लिए एक AT कमांड CLI प्रदान करता है। मैं इसे "HFP क्लाइंट" कहता हूँ, भले ही यह एक RFCOMM सर्वर है, क्योंकि यह HFAG (फोन/मॉडेम) के लिए एक "क्लाइंट" है। आप HFAG को AT कमांड भेजने के लिए HF एम्युलेटर ("क्लाइंट") का उपयोग करते हैं, इस तथ्य के बावजूद कि "सर्वर" (HFAG) ही RFCOMM कनेक्शन आरंभ करता है।
HF एम्युलेटर चलाने के लिए:
sudo python3 examples/hfpclient.py
अपने फोन को पेयर करने से पहले आपको यह विज्ञापित करने के लिए HF एम्युलेटर शुरू करने की आवश्यकता हो सकती है कि आप SDP पर एक HF हैं। जब HF एम्युलेटर चल रहा होता है, तो आपका फोन एम्युलेटर स्क्रिप्ट के साथ एक AT कमांड RFCOMM कनेक्शन आरंभ करेगा। इस प्रक्रिया को तेज करने के लिए, आप कनेक्शन/पुनः कनेक्शन ट्रिगर करने के लिए अपने फोन की Bluetooth सेटिंग्स में पेयर किए गए कंप्यूटर पर क्लिक कर सकते हैं।
एक बार जब HFAG (फोन/मॉडेम) कनेक्शन आरंभ करता है, तो आपके पास आमतौर पर HFP सत्र कॉन्फ़िगर करने के लिए एक सीमित विंडो (30 सेकंड से एक मिनट) होती है। उपयोगी AT कमांड (जैसे फोन कॉल आरंभ करना) भेजने से पहले, आपको सीमित विंडो के भीतर AT कमांड का एक अनुक्रम भेजना होगा, अन्यथा HFAG आपसे डिस्कनेक्ट हो सकता है। निम्नलिखित प्रारंभिक AT कमांड अनुक्रम अधिकांश फोन के लिए काम करना चाहिए:
AT+BRSF=39
AT+CIND=?
AT+CIND?
AT+CMER=3,0,0,1
AT+CHLD=?
AT+CCWA=1
AT+CLIP=1
AT+NREC=0
HFP सर्वर (ऑडियो गेटवे) काफी बुनियादी है, चुनिंदा कमांड्स के लिए पूर्व-कॉन्फ़िगर उत्तर वापस भेजता है। सर्वर बॉक्स से बाहर सामान्य HFP कमांड का समर्थन करने के लिए सेट किया गया है, लेकिन हर वाहन को संभवतः कुछ अतिरिक्त कमांड और/या प्रतिक्रियाओं में बदलाव की आवश्यकता होगी। कस्टम प्रतिक्रियाओं को एक टेक्स्ट फ़ाइल के माध्यम से कॉन्फ़िगर किया जा सकता है जिसमें प्रत्येक पंक्ति पर कमांड और प्रतिक्रिया जोड़े का प्रारूप होता है, कमांड और प्रतिक्रिया को टैब द्वारा अलग किया जाता है। नमूना कॉन्फ़िग फ़ाइलें examples/bbeast फ़ोल्डर में मिल सकती हैं।
अन्य सर्वरों के विपरीत, nOBEX HFP AG कार्यान्वयन वास्तव में RFCOMM कनेक्शन स्वीकार नहीं करता है। HFP मानक अस्पष्ट है कि कनेक्शन कैसे स्थापित किए जाने चाहिए, और इस प्रकार HF और AG दोनों को कनेक्शन स्वीकार करने और आरंभ करने की अनुमति है। कनेक्शन स्थापना प्रथाओं के मामले में विभिन्न हेड यूनिट अलग-अलग व्यवहार करती हैं। हालाँकि, अधिकांश HF डिवाइस AG द्वारा उनसे कनेक्ट किए जाने को स्वीकार करते हैं यदि AG अपने स्वयं के पोर्ट पर कनेक्शन स्वीकार नहीं करता है। इस प्रकार, nOBEX HFP AG "सर्वर" केवल पेयर किए गए डिवाइसों में HF सेवा का समर्थन करने वालों की खोज करता है, और फिर nOBEX HF डिवाइस से कनेक्ट होता है।
ध्यान रखें कि HFP AG कोड /var/lib/bluetooth/*/* के अंतर्गत सूचीबद्ध किसी भी डिवाइस से कनेक्ट करने का प्रयास करेगा जो HFP HF भूमिका का समर्थन करने का दावा करता है। इस प्रकार, HFP सर्वर का उपयोग करने का प्रयास करने से पहले आपको उस निर्देशिका में किसी भी गलत पेयरिंग को हटा देना चाहिए।
स्टैंडअलोन HFP AG चलाने के लिए (कॉन्फ़िग फ़ाइल वैकल्पिक है):
sudo python3 examples/multiserver.py --hfp [config_file]
HFP सर्वर (HFAG) इंटरैक्टिव ऑपरेशन का भी समर्थन करता है जहाँ आप रनटाइम पर ऑटो-प्रतिक्रियाएँ संपादित कर सकते हैं या मैन्युअल रूप से AT प्रतिक्रियाएँ भेज सकते हैं। HFP सर्वर कमांड के लिए localhost के पोर्ट 7137 पर सुनता है। आप नीचे दिखाए गए अनुसार netcat का उपयोग करके इससे कनेक्ट कर सकते हैं:
nc localhost 7137
इस इंटरफ़ेस के लिए केवल दो सरल कमांड हैं:
send <atresp> - atresp को AT प्रतिक्रिया के रूप में भेजेंursp <atcmd> <atresp> - atcmd के लिए ऑटो-प्रतिक्रिया को atresp में अपडेट/सेट करेंनिम्नलिखित उदाहरण कमांड एक आने वाली फोन कॉल का अनुकरण करेंगे:
ursp AT+CLCC +CLCC: 1,1,4,0,0,"1234567890",129
send RING
FTP (फ़ाइल ट्रांसफर प्रोफ़ाइल) क्लाइंट आपको OBEX FTP सर्वर पर फ़ाइलें ब्राउज़ करने की अनुमति देता है, जैसे nOBEX चला रहा कोई अन्य कंप्यूटर, या Bluetooth File Transfer ऐप चला रहा Android फोन। examples निर्देशिका में एक FTP क्लाइंट नमूना प्रोग्राम स्थित है।
python3 examples/ftpclient.py SERVER_MAC_ADDRESS [save_directory]
उदाहरण FTP क्लाइंट को केवल Bluetooth MAC पते के साथ तर्क के रूप में चलाने से सर्वर पर OBEX FTP के माध्यम से सुलभ सभी फ़ाइलों की एक पुनरावर्ती निर्देशिका सूची प्रिंट होगी। यदि वैकल्पिक save_directory तर्क प्रदान किया गया है, तो स्क्रिप्ट सर्वर पर सुलभ हर फ़ाइल डाउनलोड करेगी और उसे आपके कंप्यूटर पर निर्दिष्ट सेव निर्देशिका में सहेजेगी।
FTP सर्वर एक क्लाइंट को निर्दिष्ट फ़ोल्डर के अंदर आपके कंप्यूटर (सर्वर) पर फ़ाइलें ब्राउज़ करने की अनुमति देता है।
sudo python3 examples/multiserver.py --ftp PATH_TO_FTP_FOLDER
OPP (ऑब्जेक्ट पुश प्रोफ़ाइल) क्लाइंट आपके कंप्यूटर पर एक फ़ाइल को OBEX OPP सर्वर पर पुश करने की अनुमति देता है।
python3 examples/pushclient.py SERVER_MAC_ADDRESS FILE_TO_PUSH
OPP सर्वर एक क्लाइंट को निर्दिष्ट फ़ोल्डर के अंदर आपके कंप्यूटर (सर्वर) पर फ़ाइलें पुश करने की अनुमति देता है।
sudo python3 examples/multiserver.py --opp PATH_TO_OPP_FOLDER
multiserver.py स्क्रिप्ट HFP, MAP, PBAP, FTP, और OPP सर्वरों के किसी भी संयोजन को एक साथ चलाने की अनुमति देती है। ऊपर दिखाए गए उदाहरणों से तर्कों को बस संयोजित करें। HFP, MAP, और PBAP को एक साथ चलाने के लिए:
python3 examples/multiserver.py --map ~/map_root/ --pbap ~/pbap_root/ --hfp [config_file]
HFP और PBAP के संयोजन का सफलतापूर्वक 2012 Ford Focus पर परीक्षण किया गया है।
nOBEX का प्राथमिक उद्देश्य ऑटोमोटिव हेड यूनिट्स पर PBAP और MAP क्लाइंटों का नकारात्मक परीक्षण और फ़ज़िंग करना है। HFP समर्थन और PBAP/MAP क्लाइंट समर्थन इस लक्ष्य को सुविधाजनक बनाने के लिए हैं। मैन्युअल फ़ज़िंग को हाथ से संशोधित XML सूचियों, vcards, और BMSGs के साथ सर्वर चलाकर किया जा सकता है। OBEX एक समृद्ध फ़ज़िंग लक्ष्य है जिसमें कई नेस्टेड TLV संरचनाएँ हैं जो मल्टी-पार्ट संदेशों में फैल सकती हैं। PBAP और MAP vcard, BMSG, और XML पार्सर के साथ आक्रमण सतह को बहुत बढ़ाते हैं।
nOBEX में स्वचालित फ़ज़िंग के लिए एकीकृत समर्थन नहीं है, लेकिन चूँकि यह Python में लिखा गया है, इसे बढ़ाना आसान है। इसे म्यूटेशन इंजन के साथ जोड़कर और लक्ष्य डिवाइस को इंस्ट्रूमेंट करके अधिक शक्तिशाली फ़ज़िंग क्षमताएँ बनाई जा सकती हैं।
ऑटोमोटिव हेड यूनिट्स पर MAP और PBAP को फ़ज़ करने के अलावा, nOBEX का उपयोग PBAP, MAP, और अन्य OBEX प्रोफ़ाइलों (जैसे FTP) के सामान्य सकारात्मक परीक्षण के लिए भी किया जा सकता है, क्लाइंट और सर्वर दोनों भूमिकाओं के लिए। PBAP और MAP सर्वरों का परीक्षण Android के लिए OBEX Commander ऐप के साथ किया गया था, जिसमें दोषपूर्ण OBEX संचार और विकृत प्रोफ़ाइल-विशिष्ट डेटा द्वारा कई क्रैश ट्रिगर किए जा सकते थे। इसके अलावा, HFP समर्थन का उपयोग AT कमांड्स को मैन्युअल रूप से फ़ज़ करने के लिए किया जा सकता है।