Yakında iphone / Android olup olmadığını tespit ettiniz mi?


10

Uzaktan çalışıyorum ve birisinin ofisimde bir toplantı / öğle yemeği için ne zaman dışarı gittiğini bilmek kullanışlı olacaktır.

Ahududu pi yakınındaki hangi telefonları pasif olarak tespit edebileceğini düşündüm (ve sonra onları web / dropbox / ne olursa olsun yayınla)

Bunu yapmanın en kolay yolu ne olurdu? MAC adres tespiti? Bluetooth?

Yanıtlar:


10

Çok avcılık - biraz öğrendim - düşük seviyeli kablosuz tarama yapmadan diğer insanların cihazlarını tespit etme şansı yok - Her ikisi de kendi cihazlarınızsa Bluetooth iphone için çalışır:

  1. Wifi taraması bazı cihazlar için işe yarayabilir, ancak ekran kapalıyken iOS olanlar bağlanmaz! Benim iphone 6 basit arpkomut ile tespit edilebilir (aynı alt ağda bağlı cihazların ip ve mac numaralarının tablosunu verir), ancak bu sadece telefon ekranı aydınlatıldığında olur. Telefon ekranı uyuduktan sonra - wifi sınırları dışında! Eminim bu pil ömrüyle ilgilidir.

  2. Bluetooth dongle çalıştı. Bazı fantezi algoritmaların aksine mesafe hesaplaması yok - sadece mevcut / yok rPi ve iPhone'da çok az güç tüketimi ile yapılabilir. Bluetooth dongle'ı rPi'ye şu şekilde yükleyin: ( sudo aptitude install bluetooth bluez-utils bluez-compat). Telefon cihazınızın hcitool scanmac'unu aranabilir hale getirin ve ardından rPi'de ( ) yapın. Ardından cihazınıza şu şekilde bağlanın (aranabilir olduğundan emin olun): sudo bluez-simple-agent hci0 mac_of_your_deviceve her iki tarafta evet deyin. Sonra sudo bluez-test-device trusted mac_of_your_device. Şimdi ikisi de birbirini "tanıyor". Sonra yapsudo hcitool name mac_of_your_deviceiPhone'un yakında olup olmadığını anlamak için en sevdiğiniz komut dosyasında. Bu bir bağlantı oluşturmaz - sadece buna merhaba deyin. Bir ad döndürürse, telefon yakındadır. Hiçbir şey döndürmezse - telefon yakında değildir veya bluetooth kapalıdır. Orada bağlantı veya diğer mesafe hesaplama yöntemleri oluşturmaya kıyasla - bu yöntem her iki taraftaki pili korur ve hava dalgası kirliliğini minimumda tutar.


9

Ben ve bazı arkadaşlarım, bilgisayar korsanlığımızın ön kapı kilidini açmak için bir Bluetooth yakınlık tarayıcısı geliştiriyoruz .

İzin verilen tüm cihazları eşleştirdik ve esas hcitoololarak eşleştirilmiş cihazlardan birinin yakında olup olmadığını test etmek için kullandık . Örneğin, eşlenen cihazda "00: 00: 00: 00: 00: 00" adresi varsa, bunu komut satırı konsolunda yaparsınız:

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

Bu sıfır döndürürse, aygıt yakınlardadır.

Bir dezavantajı, cihaz yakında değilse bunun zaman aşımına uğraması ~ 5 saniye sürecektir.

Biz var kaynak kodunu yayınladı üzerinde Github apache açık kaynak lisansı altında.


2
Bunun çalıştığını doğrulayabilirim hcitool .... Ancak, yukarıdaki örnekte olduğu gibi komutları zincirlemeniz gerekir. Bağlantı yalnızca çok kısa bir süre için aktiftir. Yaparak karışıma yakınlık ekleyebilirsiniz hcitool rssi ....
Gunnar

2

Benzer kullanım durumları için bluetooth kullanan bazı kurulumlar gördüm, ancak muhtemelen bazı hack'leri içerecektir. Tespit etmek istediğiniz telefonlar genellikle keşfedilebilir modda değildir.

Telefonlar wifi kullanıyorsa, muhtemelen biraz yakınlık algılayabilirsiniz, ancak bu muhtemelen wifi anteninize erişmeyecekleri ve muhtemelen şifreli bağlanacakları için onları oldukça düşük bir katmanda taramanız gerekeceği anlamına gelecektir. Bazı düşük seviyeli kablosuz bonanza için kismet'e bir göz atın .

En kolay , birisi bir odada olsa da, yine de, ben tahmin ediyorum olmadığını tespit etmek için bir yol kamera modülü ve panaramic ayna kullanmak olacaktır.


1

Ofisteyken bağlandıkları bir WiFi ağınız varsa, her x dönemde MAC adreslerini PI taraması yapabilir ve bir web sayfasını (her ne olursa olsun) geçerli durumla güncelleyebilirsiniz. Muhtemelen en güvenilir rota.

Bluetooth ve bir USB Bluetooth adaptörü ile bir şeyler yapabilirsiniz, ancak bununla ilgili hiçbir deneyimim yok.

Pi'ye veya pi'nin bulunduğu ağa bağlı olmadan, çok başarılı olacağınızı düşünmüyorum.


Güzel. MAC adreslerini taramak için hangi teknoloji / uygulama / platformu kullanacağımı düşünüyordunuz?
ACooleman

Bunu yapmak için nmap, komut satırı sürümü ve biraz özel python kodu (bir python api olduğundan eminim), hızlı bir ping süpürme / MAC sorgusu yapın, önceden oluşturulmuş bir listeyle karşılaştırın, bunu bir php (HTML?) sayfası oluşturmak ve lightppd (Apache?) web sunucusu kullanarak sunmak için kullanın. Python işini x kez çalışacak şekilde ayarlayın ve web sayfasının her y periyodda otomatik olarak yenilenmesini sağlayın. Bu harika bir proje fikri ... Tabaktaki diğer tüm projeleri bitirdikten sonra denemek zorunda kalacağım.
Butters

ARP tablosu için yönlendiricinizi sorgulayabilirsiniz veya DHCP sunucunuz da olabilir ... Biraz daha hızlı yapabilir ..
Butters

1

Yukarıdaki cevapları okumak da beni aşağıdaki olasılıklar hakkında düşünmeye itti:

Kullanım Airmon-ng sürekli WiFi istemci aygıtları için şebeke tarama. Çıktı bir dosyaya yazılabilir, bu nedenle dosya değişirse bir istemci pi aralığına girmiş veya aralıktan çıkmıştır. Bilinen mac adreslerinin bir listesine sahip olmak, kullanıcıyı tanımlamanıza izin verir ve dosya değişikliği nedeniyle bazı eylemleri tetikleyebilirsiniz ...

bu oldukça ilginç bir fikir! Teşekkürler!

Arjen


Büyük mağazalar, alışveriş yapanların mallarına nasıl göz attığını, hangi reyonu atladıklarını vb. İzlemek için bu tekniği kullanır. Ancak gizlilik yasaları nedeniyle, bir mac adresini her ülkedeki bir kişiye bağlamak her zaman yasal değildir.
Havnar


1

Yaklaşık bir yıldır aynı konu üzerinde çalışıyorum. Mac'imde oldukça hızlı bir şekilde çalışmayı başardım, ancak PC'imde çalışmasını sağlamakta çok fazla sorun yaşadım. Birçok farklı yaklaşım denedim. Ben veya eşim evdeyken (yani iPhone'larımız ev WiFi'sinde tespit edilebilir) ısıtma ve sıcak suyu (bir arduino ve RF modülü aracılığıyla) açan bir ev otomasyon sistemim var. Sonunda iPhone'ların IP adresini bulmak için 'nslookup' kullandım (IP adresinin dinamik oldukları gibi değişmesi durumunda (ancak aslında yönlendiricimde asla değişmezse)) ve iPhone'un açık olup olmadığını tespit etmek için 'nmap' ağ. İPhone çok derin uykudaysa 'nmap' her zaman telefonu bulamaz, bu yüzden telefonun evde olmadığını söylemeden önce 10 kez kontrol ettim. Aşağıda python'daki ev otomasyon kodumun bir parçası. İplik geçirmeyi kullandım. Aşağıdaki kod ile herhangi bir sorunuz bana bildirin.

# 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}
        }

ve

# 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

ve ana kod

   # 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

Düzgün kendi betiğinize kopyalarsanız kod çalışmayabilir, çünkü bazı şeyleri eksik ve basit ve okunması kolay olan şeyleri denemek için kopyalamamıştım, ancak umarım yukarıdaki kod herkese nasıl yaptığımı anlar bir şeyler.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.