আইফোন / অ্যান্ড্রয়েড কাছাকাছি থাকলে সনাক্ত করুন?


10

আমি দূর থেকে কাজ করছি এবং কেউ আমার অফিসে সভা / মধ্যাহ্নভোজন করতে বেরিয়েছে তা জানতে সুবিধা হবে।

আমি ভেবেছিলাম রাস্পবেরি পাইয়ের নিকটে কোন ফোনগুলি আমি নিস্ক্রিয়ভাবে সনাক্ত করতে সক্ষম হতে পারি (এবং তারপরে সেগুলি ওয়েবে / ড্রপবক্সে / যাই হোক না কেন প্রকাশ করুন)

এটি করার সবচেয়ে সহজ উপায় কী হবে? ম্যাকের ঠিকানা সনাক্তকরণ? ব্লুটুথ?

উত্তর:


10

অনেক শিকার - বেশ কিছু শিখেছে - নিম্ন স্তরের ওয়্যারলেস স্ক্যান ছাড়া অনেক লোকের ডিভাইস সনাক্ত করার ভাগ্য নেই - ব্লুটুথ যদি আইফোনটির জন্য কাজ করে তবে উভয়ই নিজের ডিভাইস:

  1. ওয়াইফাই স্ক্যান কিছু ডিভাইসের জন্য কাজ করতে পারে তবে স্ক্রিন বন্ধ থাকাকালীন আইওএস সংযুক্ত হয় না! আমার আইফোন 6 সাধারণ arpকমান্ডের সাহায্যে সনাক্ত করা যায় (একই সাবনেটে সংযুক্ত ডিভাইসের আইপি এবং ম্যাক সংখ্যার টেবিল দেয়) তবে কেবল তখনই ঘটবে যখন ফোনের স্ক্রিনটি আলোকিত হয়। একবার ফোনের স্ক্রিনটি ঘুমায় - এটি ওয়াইফাইয়ের বাইরে চলে গেছে! আমি বাজি ধরছি এটি ব্যাটারি জীবনের স্বার্থে।

  2. ব্লুটুথ ডংলে কাজ করেছে। কিছু অভিনব অ্যালগরিদমের বিপরীতে কোনও দূরত্বের গণনা নেই - আরপিআই এবং আইফোনে খুব কম বিদ্যুৎ খরচ নিয়ে কেবল উপস্থিত / অনুপস্থিত থাকতে পারে। আরপিআইতে ব্লুটুথ ডংল ইনস্টল করুন: ( sudo aptitude install bluetooth bluez-utils bluez-compat)। আপনার ফোন ডিভাইসটি hcitool scanম্যাকটি অনুসন্ধানযোগ্য করে তৈরি করুন এবং তারপরে আরপিআইতে ( ) করুন। তারপরে আপনার ডিভাইসে (এটি অনুসন্ধানযোগ্য নিশ্চিত করুন) সাথে সংযুক্ত করুন: 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আপনার প্রিয় স্ক্রিপ্টে আইফোনটি কাছাকাছি কিনা তা নির্ধারণ করতে। এটি কোনও সংযোগ তৈরি করবে না - তবে এটিকে কেবল হাই বলুন। যদি এটি কোনও নাম দেয়, ফোনটি কাছাকাছি। যদি এটি কিছুই না ফেরায় - ফোন কাছাকাছি নয় বা ব্লুটুথ স্যুইচ অফ করা আছে। সেখানে বাইরে সংযোগ তৈরি করার বা অন্যান্য দূরত্বের গণনার পদ্ধতিগুলির তুলনায় - এই পদ্ধতিটি উভয় পক্ষের ব্যাটারি সংরক্ষণ করে এবং এয়ারওয়েভ দূষণকে সর্বনিম্ন রাখে।


9

আমি এবং আমার কয়েকজন বন্ধুরা আমাদের হ্যাকারস্পেসের সামনের দরজার লকটি খুলতে একটি ব্লুটুথ-প্রক্সিমিটি স্ক্যানার তৈরি করে চলেছি

আমরা মঞ্জুরিপ্রাপ্ত সমস্ত ডিভাইস যুক্ত করেছি এবং hcitoolজোড়যুক্ত ডিভাইসগুলির মধ্যে একটি যদি নিকটবর্তী হয় তবে তা পরীক্ষার জন্য প্রয়োজনীয়ভাবে ব্যবহৃত হয়। উদাহরণস্বরূপ, জোড়যুক্ত ডিভাইসে যদি "00: 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 সেকেন্ড সময় লাগবে।

আমরা আছে উৎস-কোড প্রকাশিত উপর গিটহাব Apache ওপেন সোর্স লাইসেন্সের অধীনে।


2
আমি নিশ্চিত করতে পারি যে এটি ব্যবহার করছে hcitool ...। তবে উপরের উদাহরণের মতো আপনাকে কমান্ডগুলি চেইন করতে হবে। সংযোগটি খুব অল্প সময়ের জন্যই সক্রিয়। আপনি মিশ্রণে প্রক্সিমিটি যুক্ত করতে পারেন hcitool rssi ...
গুনার

2

আমি অনুরূপ ব্যবহারের ক্ষেত্রে ব্লুটুথ ব্যবহার করে কিছু সেটআপ দেখেছি, তবে এটি সম্ভবত কিছু হ্যাকিংয়ের সাথে জড়িত। আপনি যে ফোনগুলি সনাক্ত করতে চান সেগুলি সাধারণত আবিষ্কারযোগ্য মোডে থাকে না।

যদি ফোনগুলি ওয়াইফাই ব্যবহার করে, আপনি সম্ভবত কিছু সান্নিধ্য সনাক্ত করতে পারেন তবে এর অর্থ সম্ভবত আপনি তাদের জন্য বরং একটি নীচের স্তরে স্ক্যান করতে হবে, যেহেতু তারা আপনার ওয়াইফাই অ্যান্টেনায় অ্যাক্সেস করবে না এবং তারা সম্ভবত এনক্রিপ্টড সংযোগ করবে। কটাক্ষপাত আছে কিসমৎ কিছু নিম্ন স্তরের বেতার Bonanza জন্য।

সবচেয়ে সহজ পদ্ধিতি হল সনাক্ত করতে, কিনা কেউ একটি রুমে হয় বা না, যদিও, আমি চাই পথ ক্যামেরা মডিউল এবং একটি panaramic আয়না ব্যবহার করতে হবে।


1

অফিসে থাকাকালীন তারা যদি সংযোগ করে এমন কোনও ওয়াইফাই নেটওয়ার্ক যদি থাকে তবে আপনি প্রতি x সময়কালে ম্যাকের ঠিকানাগুলির জন্য পিআই স্ক্যান করতে পারেন এবং বর্তমান অবস্থার সাথে একটি ওয়েব পৃষ্ঠা (ড্রপবক্স, যাই হোক না কেন) আপডেট করতে পারেন। সম্ভবত সবচেয়ে নির্ভরযোগ্য রুট।

আপনি ব্লুটুথ এবং একটি ইউএসবি ব্লুটুথ অ্যাডাপ্টারের সাহায্যে কিছু করতে সক্ষম হতে পারেন তবে এটির সাথে আমার কোনও অভিজ্ঞতা নেই।

এগুলি পাই, বা নেটওয়ার্কের সাথে সংযুক্ত না থাকলে, আপনার বেশি সাফল্য হবে বলে আমি মনে করি না।


খুশী হলাম। তাহলে আপনি কোন টেক / অ্যাপ / প্ল্যাটফর্মটি ভাবছিলেন যে আমি ম্যাকের ঠিকানাগুলি স্ক্যান করতে ব্যবহার করব?
ACooleman

আমি যেভাবে এটি করব তা হ'ল এনএম্যাপ, কমান্ড লাইন সংস্করণ এবং একটি সামান্য কাস্টম পাইথন কোড (আমি নিশ্চিত একটি পাইথন এপিআই রয়েছে), একটি দ্রুত পিং সুইপ / ম্যাক কোয়েরি করুন, এটি একটি পূর্ব নির্মিত তালিকার সাথে তুলনা করুন, পিএইচপি (HTML?) পৃষ্ঠাটি তৈরি করতে এবং লাইট্পপিডি (অ্যাপাচি?) ওয়েব সার্ভার ব্যবহার করে এটি ব্যবহার করুন। এক্স এক্স পিরিয়ড চালানোর জন্য অজগর কাজটি সেট করুন এবং প্রতি পৃষ্ঠায় ওয়েব পৃষ্ঠা অটো রিফ্রেশ করুন। এটি একটি দুর্দান্ত প্রকল্পের ধারণা ... আমার প্লেটে থাকা অন্যান্য সমস্ত প্রকল্প শেষ করার পরে আমার এটির শট দিতে হতে পারে।
বাটারগুলি

আপনি এআরপি টেবিলের জন্য আপনার রাউটারটি জিজ্ঞাসা করতে সক্ষম হতে পারেন, বা আপনি ডিএইচসিপি সার্ভারও ... এটিকে কিছুটা দ্রুত তৈরি করতে পারেন ..
বাটারস

1

উপরের উত্তরগুলি পড়াও আমাকে নিম্নলিখিত সম্ভাব্যতা সম্পর্কে চিন্তাভাবনা করতে উদ্বুদ্ধ করেছিল:

ওয়াইফাইতে ক্লায়েন্ট ডিভাইসের জন্য অবিচ্ছিন্নভাবে স্ক্যান করতে এয়ারমন-এনজি ব্যবহার করুন। আউটপুট কোনও ফাইলে লেখা যেতে পারে, সুতরাং যদি ফাইলটি পরিবর্তন হয় তবে কোনও ক্লায়েন্ট পাইয়ের সীমাটি রেখে গেছে left পরিচিত ম্যাক অ্যাড্রেসগুলির একটি তালিকা থাকার ফলে আপনি ব্যবহারকারীকে সনাক্ত করতে পারবেন এবং ফাইল পরিবর্তনের কারণে আপনি কিছু ক্রিয়া শুরু করতে পারেন ....

এটি বেশ আকর্ষণীয় ধারণা! ধন্যবাদ!

আরিয়েন


বড় দোকানগুলি কীভাবে ক্রেতারা তাদের পণ্যগুলি ব্রাউজ করে, কোন রেইন ইত্যাদি এড়িয়ে যায় তা পর্যবেক্ষণ করতে এই কৌশলটি ব্যবহার করে তবে গোপনীয়তা আইনগুলির কারণে এটি প্রতিটি দেশের কোনও ব্যক্তির সাথে কোনও ম্যাক ঠিকানার লিঙ্ক করা সর্বদা আইনী নয়।
হাভনার

1

যতক্ষণ না ডিভাইসগুলি একই নেটওয়ার্কে রয়েছে, আপনি সহজেই এটি করতে একটি রাস্পবেরি পাই ব্যবহার করতে পারেন .. আপনার প্রয়োজনীয় সমস্ত কোড সহ একটি সম্পূর্ণ প্রকল্প এখানে ...

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


আপনার প্রদত্ত লিঙ্কটিতে আকর্ষণীয় তথ্য রয়েছে তবে প্রশ্নের উত্তরটি সহ আপনি নিজের উত্তরটি উন্নত করতে পারেন।
এমপ্রোমনেট

1

তাই আমি প্রায় এক বছর ধরে একই ইস্যুতে কাজ করছি। আমি এটিকে আমার ম্যাকের সাথে মোটামুটি দ্রুত কাজ করতে পেরেছি, তবে এটি আমার পিসিতে সঠিকভাবে কাজ করতে পেতে অনেক সমস্যা হয়েছিল। আমি অনেক বিভিন্ন পদ্ধতির চেষ্টা করেছি। আমার বা আমার সঙ্গী যখন ঘরে থাকে তখন আমার কাছে একটি হোম অটোমেশন সিস্টেম থাকে যা গরম এবং গরম জল (একটি আরডুইনো এবং আরএফ মডিউলের মাধ্যমে) চালু করে (এটি আমাদের আইফোনগুলি হোম ওয়াইফাইতে সনাক্তকরণযোগ্য)। শেষ পর্যন্ত আমি আইফোনের আইপি ঠিকানা খুঁজে পেতে 'এনস্লুকআপ' ব্যবহার করেছিলাম (আইপি ঠিকানাটি গতিশীল হওয়ার কারণে পরিবর্তিত হয়েছে (তবে তারা আসলে আমার রাউটারে আসলে কখনও করেন না)) এবং আইফোন চালু আছে কিনা তা সনাক্ত করতে 'এনএম্যাপ' ব্যবহার করেছি নেটওয়ার্ক. আইফোন যদি খুব গভীর ঘুমে থাকে তবে 'এনএম্যাপ' সবসময় ফোনটি খুঁজে না পায়, তাই ফোনটি ঘরে নেই বলে আমি এটি 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

কোডটি যদি আপনি সরাসরি নিজের স্ক্রিপ্টে অনুলিপি করেন তবে এটি কাজ করতে পারে না, কারণ কিছু অংশ অনুপস্থিত রয়েছে যা আমি চেষ্টা করতে চেষ্টা করেছি এবং জিনিসগুলি সহজ এবং সহজেই সহজেই পড়তে পারি না, তবে আশা করি উপরের কোডটি সবাইকে বুঝতে পেরেছিল যে আমি কী করেছিলাম জিনিস।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.