अगर iPhone / Android पास का पता लगाएं?


10

मैं दूरस्थ रूप से काम कर रहा हूं और यह जानना आसान होगा कि कोई मेरे कार्यालय में बैठक / दोपहर के भोजन के लिए बाहर गया है।

मुझे लगा कि मैं रास्पबेरी पाई के पास कौन से फोन का निष्क्रिय पता लगाने में सक्षम हो सकता हूं (और फिर उन्हें वेब / ड्रॉपबुक / वेब पर प्रकाशित कर सकता हूं)

ऐसा करने का सबसे आसान तरीका क्या होगा? मैक पते का पता लगाने? ब्लूटूथ?

जवाबों:


10

बहुत शिकार - काफी कुछ सीखा - कोई भी अन्य निम्न स्तर के वायरलेस स्कैन के बिना अन्य लोगों के उपकरणों का पता लगाने का कोई भाग्य नहीं है - यदि iPhone आपके दोनों डिवाइस हैं, तो iPhone के लिए ब्लूटूथ काम करता है:

  1. वाईफ़ाई स्कैन कुछ उपकरणों के लिए काम कर सकता है, लेकिन स्क्रीन बंद होने पर iOS वाले कनेक्ट नहीं होते हैं! मेरे iPhone 6 को साधारण arpकमांड के साथ पता लगाया जा सकता है (एक ही सबनेट पर जुड़े उपकरणों के आईपी और मैक नंबर की तालिका देता है) लेकिन यह तभी होगा जब फोन की स्क्रीन को हल्का किया जाएगा। एक बार जब फोन स्क्रीन सो जाता है - यह वाईफाई पर सीमा से बाहर है! मुझे यकीन है कि यह बैटरी जीवन के हित में है।

  2. ब्लूटूथ डोंगल ने काम किया। कुछ फैंसी एल्गोरिदम के विपरीत कोई दूरी की गणना नहीं है - बस वर्तमान / अनुपस्थित rPi और iPhone पर बहुत कम बिजली की खपत के साथ किया जा सकता है। के रूप में rPi पर ब्लूटूथ डोंगल स्थापित करें: ( sudo aptitude install bluetooth bluez-utils bluez-compat)। अपने फोन डिवाइस के मैक को खोजा जा सकता है और फिर hcitool scanrPi पर ( ) करें। फिर अपने डिवाइस से कनेक्ट करें (सुनिश्चित करें कि इसका पता sudo bluez-simple-agent hci0 mac_of_your_deviceलगाना ) जैसा है: और दोनों पक्षों पर हां कहें। तब sudo bluez-test-device trusted mac_of_your_device। अब वे दोनों एक दूसरे को "जानते" हैं। फिर करोsudo hcitool name mac_of_your_deviceअगर iPhone पास है तो यह जानने के लिए अपनी पसंदीदा स्क्रिप्ट में। यह एक कनेक्शन नहीं बनाएगा - लेकिन इसे हाय कहें। यदि यह एक नाम देता है, तो फोन पास है। यदि यह कुछ भी नहीं देता है - फोन पास नहीं है या ब्लूटूथ बंद है। वहां कनेक्शन या अन्य दूरी की गणना के तरीके बनाने की तुलना में - यह विधि दोनों तरफ बैटरी का संरक्षण करती है और वायु प्रदूषण को न्यूनतम रखती है।


9

मेरे और मेरे कुछ दोस्त हमारे हैकर्सस्पेस के सामने के दरवाजे का ताला खोलने के लिए एक ब्लूटूथ-निकटता स्कैनर विकसित कर रहे हैं ।

हमने सभी अनुमत उपकरणों को जोड़ा है और hcitoolयदि युग्मित डिवाइस पास में है तो अनिवार्य रूप से परीक्षण किया जाता है। एक उदाहरण के रूप में, यदि युग्मित डिवाइस में "00: 00: 00: 00: 00: 00" एड्रेस है, तो आप कमांड लाइन कंसोल पर ऐसा करेंगे:

hcitool cc 00:00:00:00:00:00 && hcitool auth 00:00:00:00:00:00 && hcitool dc 00:00:00:00:00:00;

यदि यह शून्य देता है, तो डिवाइस निकटता में है।

एक नकारात्मक पहलू यह है कि अगर डिवाइस पास नहीं है, तो यह समय-समय पर ~ 5 सेकंड लेगा।

हमने अपाचे ओपन-सोर्स लाइसेंस के तहत जीथब पर स्रोत-कोड प्रकाशित किया है


2
मैं पुष्टि कर सकता हूं कि यह प्रयोग करके काम कर रहा है hcitool ...। हालाँकि, आपको ऊपर दिए गए उदाहरण की तरह कमांड को चेन करना होगा। कनेक्शन केवल बहुत कम समय के लिए सक्रिय है। आप कर में मिश्रण में निकटता जोड़ सकते हैं hcitool rssi ...
गुन्नार २१'१६ को

2

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

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

यह पता लगाने का सबसे आसान तरीका है कि कोई एक कमरे में है या नहीं, हालांकि, मुझे लगता है कि कैमरा मॉड्यूल और एक पैनोरमिक दर्पण का उपयोग करना होगा।


1

यदि आपके पास एक WiFi नेटवर्क है जिसे वे कार्यालय में होने पर कनेक्ट करते हैं, तो आप हर समय की अवधि में MAC पते के लिए PI स्कैन कर सकते हैं, और वर्तमान स्थिति के साथ एक वेब पेज (ड्रॉपबॉक्स, जो भी हो) को अपडेट कर सकते हैं। संभवतः सबसे विश्वसनीय मार्ग।

आप ब्लूटूथ, और एक USB ब्लूटूथ एडाप्टर के साथ कुछ करने में सक्षम हो सकते हैं, लेकिन मुझे इसके साथ कोई अनुभव नहीं है।

उनके बिना पाई, या नेटवर्क पर पाई जुड़ा हुआ है, मुझे नहीं लगता कि आपको बहुत सफलता मिलेगी।


अच्छा लगा। तो क्या तकनीक / ऐप / प्लेटफ़ॉर्म आप सोच रहे थे कि मैं मैक पते को स्कैन करने के लिए उपयोग करूंगा?
एसीओलमैन 6

जिस तरह से मैं यह करूँगा, वह nmap, कमांड लाइन संस्करण और एक छोटे से कस्टम पायथन कोड के साथ है (मुझे यकीन है कि एक अजगर एपीआई है), एक त्वरित पिंग स्वीप / मैक क्वेरी करें, एक पूर्व निर्मित सूची से तुलना करें php (HTML?) पेज बनाने के लिए इसका उपयोग करें और लाइटपेड (Apache?) वेब सर्वर का उपयोग करके इसे परोसें। कभी भी एक्स पीरियड को चलाने के लिए पाइथन जॉब सेट करें, और वेब पेज ऑटो को हर y अवधि में रिफ्रेश करें। यह एक अच्छा प्रोजेक्ट आइडिया है ... मुझे अपनी प्लेट पर अन्य सभी प्रोजेक्ट्स को पूरा करने के बाद शॉट देना होगा।
ब्यूटर्स

आप ARP तालिका के लिए अपने राउटर को क्वेरी करने में सक्षम हो सकते हैं, या आप डीएचसीपी सर्वर को भी ... इसे थोड़ा तेज बना सकते हैं ..
बटर

1

उपर्युक्त उत्तरों को पढ़ने से मुझे निम्नलिखित भोगवाद के बारे में सोचने में कठिनाई हुई:

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

यह काफी दिलचस्प विचार है! धन्यवाद!

अर्जेन


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

1

जब तक डिवाइस सभी एक ही नेटवर्क पर हैं, तब तक आप इसे करने के लिए आसानी से एक रास्पबेरी पाई का उपयोग कर सकते हैं .. यहां सभी कोड के साथ एक पूरी परियोजना है जो आपको चाहिए ...

http://www.element14.com/community/people/mcollinge/blog/2014/09/12/raspberry-pi-network-spy--part-1


आपके द्वारा प्रदान किए गए लिंक में दिलचस्प जानकारी है, हालांकि आप अपने उत्तर को बेहतर बना सकते हैं जिसमें प्रश्न का उत्तर भी शामिल है।
एमप्रोमोनेट

1

इसलिए मैं लगभग एक साल से इसी मुद्दे पर काम कर रहा हूं। मुझे अपने मैक पर काम करने के लिए काफी जल्दी मिल गया, लेकिन अपने पीसी पर सही काम करने में बहुत परेशानी हुई। मैंने कई अलग-अलग तरीकों की कोशिश की है। मेरे पास एक होम ऑटोमेशन सिस्टम है जो हीटिंग या गर्म पानी (एक अरुडिनो और आरएफ मॉड्यूल के माध्यम से) को चालू करता है जब मैं या मेरा साथी घर पर होते हैं (जो कि हमारे आईफ़ोन होम वाईफाई पर पता लगाने योग्य हैं)। अंत में मैंने iPhones के लिए IP पता खोजने के लिए 'nslookup' का उपयोग किया (यदि IP पता डायनामिक होने के कारण बदल गया था, लेकिन iPhone है तो यह पता लगाने के लिए) और 'nmap' जाल। अगर iPhone बहुत गहरी नींद में है, तो 'nmap' हमेशा फोन नहीं ढूंढता है, इसलिए मैंने इसे 10 बार चेक करने से पहले कहा कि फोन घर पर नहीं है। नीचे अजगर में मेरे घर स्वचालन कोड का हिस्सा है। मैंने थ्रेडिंग का इस्तेमाल किया है। नीचे दिए गए कोड के साथ कोई भी प्रश्न मुझे बताएं।

# Dictionary to store variables to reuse on program restart
    v = {
        'boilerControlCH' : 'HIH', # 'scheduled' or 'HIH' (Honey I'm Home)
        'boilerControlHW' : 'scheduled',
        'thermostatSetPoint' : 20.8,
        'thermostatVariance' : 0.1,
        'morningTime' : datetime(1970,1,1,6,0,0),
        'nightTime' : datetime(1970,1,1,23,0,0),
        'someOneHome' : False,
        'guest' : False,
        'minimumTemperatureOO' : False,
        'minimumTemperature' : 4.0,
        'iPhoneMark' : {'iPhoneHostname' : 'marks-iphone', 'home' : False},
        'iPhoneJessica' : {'iPhoneHostname' :'jessicaesiphone', 'home' : False}
        }

तथा

# Check if anyone at home
    def occupancyStatus(person, Bol = False):
        with lockOccupancyStatus:
            someOneHome = False

        if 'iPhone' in person:
            v[person]['home'] = Bol
        elif 'retest' in person:
            pass
        else:
            v[person] = Bol

        if v['guest'] == True:
            someOneHome = True

        for key in v:
            if 'iPhone' in key:
                if v[key]['home'] == True:
                    someOneHome = True

        v['someOneHome'] = someOneHome
        variablesToFile()
    return

और मुख्य कोड

   # iPhone home status threading code
    class nmapClass(threading.Thread):
        def __init__(self):
        threading.Thread.__init__(self)
    def run(self):
        global exitCounter

        nmapThread()
        msg.log('Exited nmapThread')    
        waitEvent.set()
        waitEventAdjustable.set()
        serialDataWaiting.set()
        exitCounter += 1


def nmapThread():
    iPhone = {}
    maxCounts = 10
    for phone in v:
        if 'iPhone' in phone:
            iPhone[phone] = {}
            iPhone[phone]['hostname'] = v[phone]['iPhoneHostname']
            iPhone[phone]['count'] = maxCounts
    #msg.log(iPhone)

    while exitFlag[0] == 0:
        for phone in iPhone:
            if iPhone[phone]['count'] > 0:
                phoneFound = False
                IPAddress = '0.0.0.0'

                # Find iPhones IP address using its hostname
                commandNsloolup = 'nslookup %s' %iPhone[phone]['hostname']
                childNslookup = pexpect.popen_spawn.PopenSpawn(commandNsloolup, timeout = None)
                output = childNslookup.readline()
                while '\r\n' in output:
                    #msg.log(output)
                    if 'Name:' in output:
                        output = childNslookup.readline()
                        if 'Address:' in output:
                            tempStr = output
                            startPoint = tempStr.find('192')
                            tempStr = tempStr[startPoint:]
                            IPAddress = tempStr.replace('\r\n', '')
                            #msg.log(IPAddress)
                    output = childNslookup.readline()


                if IPAddress == '0.0.0.0':
                    pass
                    #msg.error('Error finding IP address for %s' %iPhone[phone]['hostname'], GFI(CF()).lineno)
                else:
                    #commandNmap = 'nmap -PR -sn %s' %IPAddress
                    #commandNmap = 'nmap -p 62078 -Pn %s' %IPAddress # -p specifies ports to try and access, -Pn removes pinging
                    commandNmap = 'nmap -p 62078 --max-rate 100 %s' %IPAddress
                    childNmap = pexpect.popen_spawn.PopenSpawn(commandNmap, timeout = None)
                    output = childNmap.readline()
                    while '\r\n' in output:
                        if 'Host is up' in output:
                            phoneFound = True
                            break
                        output = childNmap.readline()
                    #if phoneFound:
                    #   break


                if phoneFound:              
                    iPhone[phone]['count'] = 0

                    if v[phone]['home'] == False:
                        msg.log('%s\'s iPhone has returned home' %phone)
                        occupancyStatus(phone, True)
                        waitEventAdjustable.set()
                    #else:
                        #msg.log('%s\'s iPhone still at home' %phone)
                else:
                    iPhone[phone]['count'] -= 1

                    if v[phone]['home'] == True and iPhone[phone]['count'] == 0:
                        msg.log('%s\'s iPhone has left home' %phone)
                        occupancyStatus(phone, False)
                        waitEventAdjustable.set()
                    #else:
                        #msg.log('%s\'s iPhone still away from home' %phone)

            elif iPhone[phone]['count'] < 0:
                msg.error('Error with count variable in iPhone dictionary', GFI(CF()).lineno)


        longWait = True
        for phone in iPhone:
            if iPhone[phone]['count'] > 0:
                longWait = False
                #msg.log('%s: %s' %(phone, iPhone[phone]['count']))

        if longWait:
            #msg.log('wait long')               
            # 600 = run every 10 minutes
            waitEvent.wait(timeout=600)
            for phone in iPhone:
                iPhone[phone]['count'] = maxCounts
        else:
            #msg.log('wait short')
            waitEvent.wait(timeout=60)  

    return

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

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