जब एक घर वाईफाई नेटवर्क से कनेक्ट होता है तो मोबाइल डिवाइस का पता कैसे लगाएं?


10

सर्वर को पहचानने का सबसे अच्छा तरीका क्या होगा जब एक विशिष्ट मोबाइल डिवाइस (सेल फोन, आईपैड, आदि) नेटवर्क से कनेक्ट होता है (वायरलेस, निश्चित रूप से)?

एक उदाहरण की स्थिति के रूप में, किसी व्यक्ति के पास अपने सेलफोन पर अपने घर वाईफाई नेटवर्क ठीक से कॉन्फ़िगर किया गया है। जब वह राउटर की सीमा के भीतर हो जाता है, तो यह कनेक्ट होगा (उस बारे में कुछ भी नया नहीं है)। उस राउटर के संबंध में, उसका होम सर्वर एक निश्चित प्रोग्राम लॉन्च करेगा (या एक अधिसूचना फेंक देगा, एक फ़ाइल को लिख देगा, आदि)।

मैंने सोचा था कि एक संभावित समाधान एक नेटवर्क-होस्टेड कस्टम "वेब ऐप" होगा जिसे फोन से लॉन्च किया जाएगा ताकि सर्वर को यह पता चल जाए कि पेज कहा जाता है। हालाँकि, अगर यह तब हो सकता है जब फोन अपने आप कनेक्ट हो जाए, तो यह सबसे अच्छा होगा।

किसी भी विचार या वैकल्पिक समाधान बहुत सराहना की जाएगी, इसलिए अग्रिम धन्यवाद!


यदि यह एक एंड्रॉइड फोन है तो एक स्थानीय वेबसाइट को छोड़ना क्रोन जॉब सबसे आसान होगा। इसे नेटवर्क साइड से करने के लिए आपको RADIUS प्रोटोकॉल का उपयोग करना होगा और ठीक से सेटअप RADIUS सर्वर होना चाहिए।
हकले २ H

सिर्फ अपने राउटर लॉग की समीक्षा क्यों न करें। चूंकि ये लॉग टेक्स्ट आधारित होते हैं इसलिए लॉग को क्वेरी करना और केवल आपकी आवश्यक जानकारी प्राप्त करना आसान होगा। निश्चित रूप से किसी ने ऐसा करने के लिए कोड लिखा है, लेकिन यदि यह एक सरल अभ्यास नहीं होगा।

जवाबों:


4

मुझे लगता है कि इसे आसानी से पूरा किया जा सकता है arp-scan

स्थापित करें arp-scan: sudo apt-get install arp-scan
स्थानीय नेटवर्क पर सभी मेजबानों का पता लगाएँ:sudo arp-scan -l

आप समय-समय पर (हर 2 मिनट शायद) एक स्क्रिप्ट सेट कर सकते हैं, जो एक स्क्रिप्ट चलाती है, जो आरपी-स्कैन के साथ नेटवर्क को स्कैन करती है और सक्रिय मेजबानों की खोज के लिए अपने आउटपुट को पार्स करती है।

कभी-कभी मुझे -r 3ध्वज की आवश्यकता होती है , जो इसे तीन बार चलाता है; डिफ़ॉल्ट 2 बार के रूप में बहुत बेहतर काम करता है, जो कभी-कभी कुछ उपकरणों को याद करता है। इस प्रकार:

 sudo arp-scan -l -r 3 | grep {Phone Static Assigned IP} 

एलजी वी 30+ के लिए मेरे लिए बेहतर काम करता है।


यह ध्यान दिया जाना चाहिए कि कुछ उपकरणों को तब तक नहीं दिखाया जा सकता है जब तक कि वे चालू न हों। जब तक स्क्रीन ऑन नहीं होगी तब तक मेरा नेक्सस 4 नहीं दिखेगा।
निकोलस बौलियान

3
import subprocess

if __name__ == '__main__':
    while True:
        sleep(5)
        p = subprocess.Popen("arp-scan -l | grep xx:xx:xx:xx:xx:xx", stdout=subprocess.PIPE, shell=True)
        (output, err) = p.communicate()
        p_status = p.wait()
        if output:
            print "Yay, the devine is connected to your network!"
        else:
            print "The device is not present!"

इस तरह से आप अपने डिवाइस के मैक के लिए स्कैन कर सकते हैं :)


2

मैं वास्तव में इसके लिए एक समाधान लागू करने पर विचार कर रहा हूं जो निम्नलिखित आवश्यकताओं को पूरा करता है:

  1. फोन को नेटवर्क पर आईपी पता निर्दिष्ट करने की आवश्यकता नहीं है।
  2. फोन को समय-समय पर सिग्नल भेजने की आवश्यकता नहीं होती है जो इसकी बैटरी को खत्म कर देगा।
  3. यदि नेटवर्क पर कई फोन हैं, तो उन सभी का पता लगाया जाएगा।

मेरा इरादा ssh के साथ फोन फाइलसिस्टम को माउंट करना है, लेकिन इसका उपयोग जो भी किया जा सकता है।

मान लीजिए कि स्थानीय नेटवर्क 192.168.1.0 है ...

इसलिए मैं एक ऐसे एप को लागू करूंगा जो प्रसारण पते से यूडीपी प्रसारणों को सुनता है 192.168.1.255:। यह एप्लिकेशन बैटरी को निष्क्रिय नहीं करेगा क्योंकि यह पूरी तरह निष्क्रिय है। (यह तभी सक्रिय होता है जब एक पैकेट प्राप्त होता है)।

कंप्यूटर पर एक डेमॉन समय-समय पर प्रसारण को प्रसारण पते पर भेजेगा 192.168.1.255। फोन ऐसे संकेतों का जवाब देगा जो उसका नाम, आईडी, आईपी पता आदि देगा।

अब कंप्यूटर जानता है कि फोन नेटवर्क पर मौजूद है और मेरे मामले के लिए sshfs माउंट को लागू कर सकता है।

निश्चित रूप से इसके लिए प्रोग्रामिंग कार्य सहित बहुत सारे काम की आवश्यकता है, और यह आसान नहीं है। लेकिन मुझे लगता है कि यह सबसे विश्वसनीय और उचित समाधान होगा।


1
वाह, तो मूल रूप से एक कस्टम प्रोटोकॉल ... किसी को लगता है कि पहले से ही इस तरह से कुछ मौजूद होगा।
माइकल

1

जिस तरीके के बारे में मैं सोच सकता हूं वह सबसे अच्छा तरीका है कि डिवाइस को एक स्थिर आईपी पता दिया जाए, और हर X सेकंड में डिवाइस को पिंग करने और अपने प्रोग्राम / अधिसूचना को ट्रिगर करने के लिए बस एक स्क्रिप्ट का उपयोग करें।

ध्यान देने योग्य बातें: कई फोन नींद से जागने तक वाईफाई नेटवर्क से कनेक्ट नहीं होंगे। आपकी स्क्रिप्ट को सोने के लिए जाने वाले फोन और घर छोड़ने वाले फोन के बीच अंतर बताने में सक्षम होने की आवश्यकता होगी, संभवतः दिन के समय पर विचार करके। उसके बाद, स्क्रिप्ट को चलाने के लिए एक प्रोग्राम ट्रिगर या प्रकट होने के लिए एक सूचना तुच्छ है।


0

मैंने एक स्क्रिप्ट लिखी है जो कि आर्इपी-स्कैन और आईफोन पर स्टेटिक आईपी एड्रेस का उपयोग करके कुछ ऐसा ही करती है।

आप यहां कोड पा सकते हैं: https://github.com/blackairplane/pydetect

इसे साफ करने की आवश्यकता है क्योंकि मैं अजगर के लिए नया हूं, लेकिन मुझे लगता है कि यह अवधारणा को दिखाता है।


0

मैं इस पर लड़खड़ाया और जैसा कि मैंने एक बार कुछ इसी तरह एक उत्तर पोस्ट करने का फैसला किया।

मैंने निम्नलिखित कार्य किया:

1. Ping all addresses within given network and subnet (excluding network and broadcast addresses)
2. Wait for response has a timeout so that if device doesn't answer from furthest corner of your WiFi it is considered not present.
3. So we get all IPs on the net that answer to ICMP packets.
4. Then use each detected IP to ask for more and decide which device you like and which one you don't.

मेरे मामले में मेरे पास अपने डिवाइस पर एक HTTP सर्वर चल रहा था। इसलिए मैंने बस पोर्ट 80 पर अनिवार्य रूप से कुछ भी नहीं करने के लिए HTTP HEAD अनुरोध भेजा है। यदि डिवाइस ने जवाब दिया और सर्वर हेडर ठीक से नाम दिया गया है, तो यह मेरा डिवाइस है।

लेकिन मैं पहले पिंग के बिना तेजी से नहीं जा सकता था। HTTP टीसीपी है और अनुरोध बड़ा है, इसलिए वाईफाई के लिए टाइमआउट 4 सेकंड का होना चाहिए। 253 पतों के लिए ऐसा करना नरक के समान धीमा है। लेकिन आपके पास 253 डिवाइस (शायद) अधिक कम HTTP सर्वर नहीं होंगे। (या आपके मामले में, फोन)

राउटर लॉग को ध्यान में रखते हुए बहुत अच्छा विचार है, और आसान है। और सभी को पिंग करने से भी तेज। कुछ राउटरों को उन्हें प्राप्त करने के लिए लॉगिंग की भी आवश्यकता नहीं होती है।

इसके अलावा, यह जांचने योग्य है कि आपके डिवाइस में UPNP का समर्थन है या नहीं। यदि ऐसा होता है, तो आप इसकी उपस्थिति का पता लगाने के लिए यूपीएनपी का उपयोग कर सकते हैं। यह आधिकारिक समाधान होगा (UPNP के यूडीपी के लिए प्रसारण पर सुनना)। लेकिन सभी डिवाइस इसका समर्थन नहीं करते हैं। लेकिन सभी डिवाइस ICMP का भी समर्थन नहीं करते हैं। (वे अनावश्यक रूप से बमबारी नहीं करना चाहते हैं)।

एक और दिलचस्प संभावना है। आप डीएचसीपी पैकेट के लिए मछली पकड़ सकते हैं और देख सकते हैं कि कब एक राउटर एक नए डिवाइस को आईपी एड्रेस दे रहा है। लेकिन यह स्थिर IP वाले उपकरणों के लिए काम नहीं करेगा। वे नेटवर्क को तब तक स्पर्श नहीं करेंगे जब तक उन्हें कुछ की आवश्यकता नहीं है। जब तक आप एक स्निफर के रूप में कार्य नहीं करना चाहते हैं तब तक वाईफाई से कनेक्ट करना एक और परत पर है और आसानी से पता नहीं लगाया जा सकता है। मुझे यकीन नहीं है कि यह एक उचित मोड में नेटवर्क एडेप्टर के साथ भी संभव है। मुझे लगता है कि इसके लिए अतिरिक्त हार्डवेयर की जरूरत होगी।

पाइथन में पिंग को प्राप्त करने के लिए, पिंग प्रोग्राम को उपप्रोसेस किए बिना और गति को खोने के बिना, आपको कच्चे सॉकेट बनाने और मैन्युअल रूप से आईसीएमपी पैकेट का निर्माण करना होगा। यह कठिन नहीं है। इसका उदाहरण वेब पर कहीं है। बेशक, इसे भेजने के लिए आपको पिंग की तरह रूट अनुमतियों की आवश्यकता होगी। यह एक खामी है। यदि आप सॉफ़्टवेयर वितरित करेंगे तो आप उपयोगकर्ताओं से इसे रूट के रूप में चलाने की अपेक्षा नहीं कर सकते।


0

मेरे पास दो समाधान थे जिनका मैंने उपयोग किया। (अजगर)

समाधान 1

सबसे पहले ज्ञात ipnumbers को समतल करना था जिसे मैं ट्रैक करना चाहता हूं। मैंने यह तीन चरणों में किया। 1 # "-c1" का उपयोग केवल एक पिंग भेजने के लिए करें। यदि डिवाइस सक्रिय है तो वह उत्तर देगा और फ़ंक्शन 2 # # "-c3" सफलता के साथ बाहर निकल जाएगा अब इसे तीन में से एक पर जवाब देने के लिए अधिक समय दें। यह आमतौर पर पर्याप्त है जब यह एक खराब वाईफाई सिग्नल है। 3 # उपयोग "-c10" यह जरूरत हो सकती है जब यह वास्तव में बुरा वाईफ़ाई संकेत है। (पुराने iPad के बारे में 10 जवाब देने की कोशिश करता है की जरूरत पर ध्यान दिया गया) चीजों को गति देने के लिए मैंने प्रत्येक आईपी नंबर के लिए अलग-अलग प्रक्रियाएं बनाईं जिन्हें मैं ट्रैक करना चाहता हूं।

मैंने पिंगिंग अंतराल को भी इस आधार पर बदल दिया कि यह सफलता है या नहीं। यदि यह डिवाइस पाता है तो यह तब तक इंतजार करेगा जब तक यह फिर से जांच नहीं करता। यदि यह एक विफलता है तो यह 60 सेकंड में फिर से कोशिश करेगा। (मुझे मेरे घर में प्रवेश करने पर रोशनी चाहिए) इसलिए 60 का दशक मुझे सड़क पर खोजने के लिए काफी है

यह पूरी तरह से काम किया! जब मैं घर गया तो मुझे होश आया और जब मैं बाहर गया तो लाइट बंद कर दी।

समाधान २

Arping नेटवर्क पर भारी नहीं हो सकता है, लेकिन मैंने सभी पिंग को छोड़ने के लिए समाधान बदल दिया और अपने रास्पबेरी जी पर अपना खुद का डीएचसीपी सर्वर बनाया।

मैंने फिर "कमिट" में जोड़ा, जो एक स्क्रिप्ट को ट्रिगर करता है जैसे ही एक डिवाइस एक ipnumber हो जाता है। जैसे ही कोई उपकरण मिलता है या उसका नवीनीकरण होता है, यह स्क्रिप्ट मेरे www सर्वर (फ्लास्क) को सूचित करने के लिए 'कर्ल http एपीआई कॉल' का उपयोग करती है।

अपने एंड्रॉइड पर मैंने स्क्रीन बंद होने पर वाईफाई को कभी भी बंद नहीं करने के लिए सेटिंग्स बदल दीं। यकीन नहीं तो आईफोन पर संभव है। बैटरी पर कोई बड़ा अंतर नहीं (OnePlus 5)

पहले समाधान में विशिष्ट मैक के लिए ब्लूटूथ स्कैनिंग भी शामिल थी। यहां तक ​​कि अगर मेरे वाईफाई मेरे फोन पर बंद है तो भी यह ब्लूटूथ को समझेगा। मैक पते का उपयोग करने के लिए इसे जोड़ी की जरूरत नहीं है या यह सभी के लिए उपलब्ध है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.