題:
檢測iphone / Android是否在附近?
ACooleman
2014-04-25 16:50:22 UTC
view on stackexchange narkive permalink

我正在遠程工作,所以很容易知道何時有人在我的辦公室開會/共進午餐。

我認為我可能能夠被動地檢測到樹莓派附近的哪些手機(然後將它們發佈到Web / Dropbox等)

最簡單的方法是這個? MAC地址檢測?藍牙?

七 答案:
Ravi Tejwani
2016-02-13 10:32:09 UTC
view on stackexchange narkive permalink

大量狩獵-學到了很多東西-沒有很多低級別的無線掃描就無法檢測到其他人的設備-如果藍牙和iphone都是您自己的設備,則可用於iphone:

>
  • Wifi掃描可能在某些設備上有效,但在屏幕關閉時iOS的那些設備無法連接!我的iphone 6可以通過簡單的 arp 命令(在同一子網中提供連接設備的ip和mac編號表)進行檢測,但這僅在電話屏幕點亮時才會發生。手機屏幕進入休眠狀態後,它就無法進入wifi了!我敢打賭這是出於電池壽命的考慮。

  • 藍牙加密狗可以正常工作。與現有的一些高級算法不同,沒有距離計算-在rPi和iPhone上只需很少的功耗就可以完成當前/不存在的計算。在rPi上以如下方式安裝藍牙軟件狗:( sudo aptitude install bluetooth bluez-utils bluez-compat )。通過使其可搜索來找出電話設備的mac,然後在rPi上執行( hcitool scan )。然後以以下方式連接到您的設備(確保其可搜索): sudo bluez-simple-agent hci0 mac_of_your_device ,並在兩邊都說是。然後 sudo bluez-test-device受信任的mac_of_your_device 。現在他們倆彼此“了解”。然後在您喜歡的腳本中使用 sudo hcitool名稱mac_of_your_device 來確定iphone是否在附近。這不會創建連接-只是打個招呼。如果返回名字,則電話在附近。如果未返回任何內容-手機不在附近或藍牙已關閉。與在那裡創建連接或其他距離計算方法相比,此方法節省了兩側電池,並將電波污染降至最低。

  • ol>
    MadMike
    2014-12-29 16:23:22 UTC
    view on stackexchange narkive permalink

    我和我的一些朋友一直在開發藍牙接近掃描儀,以打開我們我們的黑客空間的前門鎖。

    我們已經將所有允許的設備配對,並且基本上使用 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秒鐘的超時時間。

    我們已經發布了源代碼在Apache開源許可下的 Github中。

    我可以使用`hcitool ...`確認它正在工作。但是,您必須像上面給出的示例一樣鏈接命令。連接僅在很短的時間內處於活動狀態。您可以通過執行“ hcitool rssi ...”來添加接近度。
    Bex
    2014-04-25 17:14:29 UTC
    view on stackexchange narkive permalink

    我已經看到一些針對類似用例使用藍牙的設置,但是可能會涉及一些黑客行為。您要檢測的電話通常處於不可發現模式。

    如果電話使用wifi,則可能會檢測到一定距離,但這也可能意味著您必須在較低的溫度下進行掃描。層,因為他們將無法訪問您的wifi天線,並且可能會以加密方式進行連接。看看 kismet可以找到一些低級別的無線財源。

    檢測某人是否在房間裡的最簡單方法會猜到是要使用攝像頭模塊和全景鏡。

    Butters
    2014-04-25 22:20:05 UTC
    view on stackexchange narkive permalink

    如果您有一個WiFi網絡,當他們在辦公室時可以連接到WiFi網絡,則可以讓PI每隔x個時間段掃描一次MAC地址,並以當前狀態更新網頁(下拉列表,無論如何)。可能是最可靠的路線。

    您也許可以使用藍牙和USB藍牙適配器進行某些操作,但是我對此沒有經驗。

    如果沒有將它們連接到pi ,或者pi正在運行的網絡,我認為您不會取得太大的成功。

    真好那麼,您認為我將使用哪種技術/應用程序/平台來掃描MAC地址?
    我的方式是使用nmap,命令行版本和一些自定義python代碼(我確定有python API),執行快速ping掃描/ MAC查詢,並將其與預先構建的列表進行比較,使用它來構建一個php(HTML?)頁面並使用lightppd(Apache?)Web服務器為其提供服務。將python作業設置為每隔x個時間段運行一次,並使網頁每隔y個時間段自動刷新一次。這是一個很棒的項目構想...在完成所有其他項目之後,我可能不得不試一試。
    您也許可以在路由器上查詢ARP表,或者也可以在DHCP服務器上查詢……可能會使它更快一些。
    credmp
    2014-04-26 15:27:02 UTC
    view on stackexchange narkive permalink

    閱讀以上答案也使我開始思考以下可能性:

    使用 airmon-ng 連續掃描網絡以查找wifi上的客戶端設備。可以將輸出寫入文件,因此,如果文件更改,則客戶端已經輸入或離開pi的範圍。擁有已知的mac地址列表可讓您識別用戶,由於文件更改,您可能會觸發某些操作...。

    這是一個非常有趣的想法!謝謝!

    Arjen

    大型商店使用這種技術來監視購物者瀏覽商品的方式,跳過的人造絲等。但是,由於隱私法規的限制,將mac地址鏈接到每個國家/地區的人並不總是合法的。
    endpoint101
    2015-04-25 16:03:32 UTC
    view on stackexchange narkive permalink

    只要設備都在同一網絡上,您就可以輕鬆地使用Raspberry Pi來完成此操作。這是一個完整的項目,其中包含您需要的所有代碼...

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

    您提供的鏈接中包含有趣的信息,但是您可以改善答案,包括對問題的答案。
    irishcream24
    2019-09-23 00:36:33 UTC
    view on stackexchange narkive permalink

    所以我已經在同一個問題上工作了大約一年。我很快就可以在Mac上運行它,但是要使其在PC上正常運行卻遇到了很多麻煩。我嘗試了許多不同的方法。我有一個家庭自動化系統,當我或我的伴侶在家時(即可以在家庭WiFi上檢測到我們的iPhone),該系統可以打開暖氣和熱水(通過arduino和RF模塊)。最後,我使用“ nslookup”查找iPhone的IP地址(以防IP地址因為動態而改變(但實際上它們在我的路由器上從未更改過))和“ nmap”來檢測iPhone是否在開啟網絡。如果iPhone處於深度睡眠狀態,則“ nmap”並不總是能找到電話,因此我已經對其進行了10次檢查,然後才說電話不在家裡。以下是我的python家庭自動化代碼的一部分。我已經使用了線程。關於以下代碼的任何問題都會讓我知道。

     #字典,用於存儲變量以在程序重新啟動時重用親愛的我回家)'boilerControlHW':'預定的','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}}  

     #檢查是否有人在家def occupancyStatus(person,Bol = False):帶鎖OccupancyStatus:someOneHome = False,如果親自使用“ iPhone”:v [person] ['home'] =親自進行BOL Elif'retest':通過否則: v [person] = Bol,如果v ['guest'] ==真:someOneHome =真,用於輸入v:如果輸入“ iPhone”:
    如果v [key] ['home'] == True:someOneHome = True v ['someOneHome'] = someOneHome variablesToFile()返回 

    和主代碼

     #iPhone家庭狀態線程代碼類nmapClass(threading.Thread):def __init __(self):threading.Thread .__ init __(self)def run(self):global exitCounter nmapThread()msg.log('退出nmapThread ')waitEvent.set()waitEventAdjustable.set()serialDataWaiting.set()exitCounter + = 1def nmapThread():iPhone = {} v中手機的maxCounts = 10:如果手機中的“ iPhone”:iPhone [phone] = { } iPhone [phone] ['主機名'] = v [phone] ['iPhoneHostname'] iPhone [phone] ['count'] = maxCounts#msg.log(iPhone)而exitFlag [0] == 0:用於電話輸入iPhone:如果iPhone [phone] ['count'] > 0:phoneFound =假IPAddress ='0.0.0.0'#F使用其主機名命令顯示iPhone的IP地址Nsloolup ='nslookup%s'%iPhone [phone] ['hostname'] childNslookup = pexpect.popen_spawn.PopenSpawn(commandNsloolup,timeout = None)輸出= childNslookup.readline()而'\ r \輸出中的n':#msg.log(輸出)如果輸出中的'名稱:':輸出= childNslookup.readline()如果輸出中的'地址:':tempStr =輸出startPoint = tempStr.find('192')tempStr = tempStr [startPoint:] IPAddress = tempStr.replace('\ r \ n','')#msg.log(IPAddress)output = childNslookup.readline()如果IPAddress =='0.0.0.0':通過
    #msg.error(“為%s查找IP地址出錯”%iPhone [電話] ['主機名'],GFI(CF())。lineno)否則:#commandNmap ='nmap -PR -sn%s'%IPAddress #commandNmap ='nmap -p 62078 -Pn%s'%IPAddress#-p指定要嘗試訪問的端口,-Pn刪除ping命令Nmap ='nmap -p 62078 --max-rate 100%s'%IPAddress childNmap = pexpect .popen_spawn.PopenSpawn(commandNmap,timeout = None)output = childNmap.readline()而輸出中的'\ r \ n':如果輸出中的'Host up up':phoneFound = True break輸出= childNmap.readline()#if phoneFound:#如果phoneFound則中斷:如果v [phone] ['home'] ==假,iPhone [phone] ['count'] = 0否:msg.log('%s \'的iPhone已退出urned home'%phone)occupancyStatus(phone,True)waitEventAdjustable.set()#else:#msg.log('%s \'s iPhone仍在家裡'%phone)其他:iPhone [phone] ['count'] -= 1,如果v [phone] ['home'] == True和iPhone [phone] ['count'] == 0:msg.log('%s \'s iPhone已離開家'%phone)occupancyStatus( phone,False)waitEventAdjustable.set()#else:#msg.log('%s \'s iPhone仍然不在家'%phone)elif iPhone [phone] ['count'] < 0:msg.error(' iPhone字典中的count變量出錯,'GFI(CF())。lineno)longWait =對於iPhone中的電話為true:如果iPhone [phone] ['count'] > 0:longWait = False
    #msg.log('%s:%s'%(phone,iPhone [phone] ['count']))如果長時間等待:#msg.log('wait long')#600 =每10分鐘運行一次waitEvent.wait (timeout = 600)for iPhone中的電話:iPhone [phone] ['count'] = maxCounts else:#msg.log('wait short')waitEvent.wait(timeout = 60)return  

    如果直接將其複製到自己的腳本中,則該代碼可能無法正常工作,因為有些部分我還沒有復制,因此為了使事情保持簡單易讀,我沒有復制這些部分,但希望上面的代碼能給大家一種感覺我是怎麼做的。



    該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 3.0許可。
    Loading...