簡體   English   中英

嘗試使用python腳本在我的網絡上發現iOS設備

[英]Trying to discover iOS devices on my network using python script

嘗試使用pybonjour但不確定它是否是我需要的。 https://code.google.com/p/pybonjour/

我希望能夠發現自動出現在我的網絡上的iOS設備,稍后將基於此運行腳本,但首先我想在我的wifi網絡上出現/消失后立即發現iOS設備。

那么問題是,我該怎么做? 在安裝了python27和pybonjour軟件包的windows機器上運行時,這兩個示例在pybonjour頁面上運行,但是我使用我的網絡中包含的腳本運行什么命令來發現iOS設備? 或者這個只運行在我的電腦上運行此腳本的發現服務!

如果我走向錯誤的方向請告訴我,我似乎無法找到關於此包的文檔!

python browse_and_resolve.py xxxxxx

Thx Matt。

更新中...

本文和瀏覽器在查找我需要搜索的服務時很有幫助, http://marknelson.us/2011/10/25/dns-service-discovery-on-windows/

例; (這發現了我的蘋果電視,不在家里,所以無法檢查iphone的名稱!我假設是iphone!

python browse_and_resolve.py _appletv._tcp

此外,如果您有Windows實用程序dns-sd.exe,它將搜索網絡上可用的所有服務。 我用它來找到我要找的東西。

dns-sd -B _services._dns-sd._udp

更新中...

“Bonjour有兩種使用方式: - 發布服務 - 檢測(瀏覽)可用服務”。

對於我想做的事情,我認為它不會起作用,因為ipad / iPhone不會宣傳服務,除非我正在運行一個宣傳一個的應用程序(或越獄我的iPhone / ipad然后ssh將打開) 。 還有什么想法嗎?

您嘗試做的事情(a)可能無法完成,(b)如果可能的話,可能沒什么用處。

Bonjour的目的是發現服務 ,而不是設備 當然,每個服務都是由某些設備提供的,因此間接地您可以通過它發現設備......但只能通過發現他們正在宣傳的服務。

據我所知,(Apple電視除外)不會宣傳任何服務,除非您正在運行使用Bonjour在其他計算機上查找相同應用程序的應用程序。 (除了越獄設備,通常廣告SSH,AFP等)

有幾種方法間接獲得網絡上任何人公布的所有服務的列表。 最簡單的可能是使用適用於Windows的Bonjour Browser (我從來沒有實際使用它,但原來的Mac工具和Java端口,這兩個我用過,都表明此Windows端口Windows用戶。)火起來,你會得到服務的列表,你可以點擊每一個來獲取詳細信息。

因此,您可以驗證您的iPhone和iPad沒有宣傳任何服務,這將表明無法通過Bonjour檢測它們。

同時,即使你沒有找到一個設備,你打算做些什么? 大概你想以某種方式與設備通信,對吧? 無論您嘗試與哪種服務進行通信...只需瀏覽該服務 - 然后,如果適用,請過濾到iOS設備。 這比瀏覽iOS設備更容易,然后過濾到那些擁有您想要的服務的設備。


至於是否有任何方法可以檢測iOS設備......嗯,至少有兩種可能性。 我不知道他們中的任何一個是否會起作用,但......

首先,即使iOS設備沒有為您做廣告,我也認為它正在瀏覽可以宣傳的服務。 怎么還能找到AirTunes的Apple TV,局域網上的iTunes同步等等?

因此,使用Bonjour瀏覽器獲取您的iTunes運行桌面,Apple TV等廣告的所有服務的列表。 然后關閉桌面上的所有服務,使用PyBonjour來宣傳看似合理相關的服務(如果需要,還可以使用netcat將瑣碎的監聽器放在你宣傳的端口上)。 然后打開你的iPhone,看看它是否連接到任何一個。 您可能希望讓它保持運行一段時間,或者關閉並重新打開WiFi。 (我猜測,盡管有Apple的建議,它不會持續瀏覽大多數服務,但只是偶爾檢查一次和/或每次網絡狀態發生變化。畢竟,Apple的建議是針對前台互動應用,不是后台服務。)

不幸的是,即使您可以找到所有iOS設備將連接的服務,您也可能無法通過在那里獲得連接來區分iOS設備。 例如,我很確定運行iTunes的任何Mac或Windows機器都會打破你的假AirTunes服務,任何Mac都會打到你的AirPrint,依此類推。 那么,你如何將它與iPhone擊中呢? 您可能需要實際提供足夠的協議來從中獲取信息。 對於Apple的無證協議,這將特別困難。

但希望你會幸運,並且會有一些東西,所有iOS設備,沒有別的,將要與之交談。 iTunes Sync看起來很明顯。

或者,他們必須播放一些內容,否則它們就無法播放。 沒有廣播你就無法上網。 並且大多數家庭WiFi網絡使用DHCP,這意味着他們也必須廣播DHCP發現(和請求)。 您可以在這些消息中檢測到某種啟發式簽名。 如果沒有別的,啟用DDNS會導致設備發送其主機名,您可以根據它進行猜測(例如,除非您更改默認值, hostname.lower().endswith('iphone') )。

最簡單的方法可能是將桌面設置為家庭網絡的主要訪問點。 我相信它就像在控制面板中某處打開Internet連接共享一樣簡單。 (設置為DHCP中繼代理比完全路由器的開銷要少得多,但我不知道你是怎么開始在Windows上開始這樣做的。)然后你可以捕獲DHCP廣播(或者,如果沒有,那么, 802.11廣播)當他們進來時, Wireshark將為您輕松捕獲和解析消息,因此您可以觀看並看看它是否值得追求更遠。 (有關Wireshark隱藏的單線描述中不明顯的格式的詳細信息,請參閱RFC 2131。

你可以把它帶到更遠的地方,觀看每個主人在連接到互聯網后所建立的互聯網連接。 任何定期檢查App Store,iOS升級服務器等的設備......好吧,除非其中一個越獄的devteam家伙住在你家里,那可能是iPhone,對吧? 缺點是這些檢查中的一些可能是非常周期性的,並且在連接到網絡6小時后檢測到iPhone並不是很令人興奮。

使用python-nmap而不是Bonjour。 或者您可以使用pyzeroconf (Bonjour是zeroconf的一個實現),但它有點過時(但應該仍然有效)。

python-nmap可能是最簡單的,讓我們假設您想找到所有在其主機名中都有“iPhone”或“iPad”的連接設備(只是一個簡單的概念):

import nmap

...

def notify_me(ip, hostname):
  print("I found an iOS device! IP Address: %s, Hostname: %s" % (ip, hostname))

iOS_device_list = ['iPhone', 'iPad']
iOS_devices_on_net = {}
nm = nmap.PortScanner()

# scan ip range
for i in range(2, 50, 1):
  ip = "192.168.1." + str(i)
  # specify ports to scan
  nm.scan(ip, '62078') # Matt mentioned that it picks up iphone-sync on this port
  hostname = nm[ip].hostname()
  for device in iOS_device_list:
    if device.lower() in hostname.lower():
      iOS_devices_on_net.update({ip:hostname})
      notify_me(ip, hostname)

# show all iOS devices in ip range
print iOS_devices_on_net

這種方法的局限性在於它依賴於未更改主機名的個人,該主機名最初包括其名稱和設備名稱。 它還假設在iOS設備上有一個端口偵聽將返回主機名 (可能不是這種情況)。 您可以使用osscan作為使用python-nmap庫的命令運行它。 這顯然是一種更好的方法。 我上面的概念只是一個如何使用它的簡單例子。

從命令行使用nmap(我相信python-nmap有nm.commandline()方法)是最簡單的:

nmap -O -v ip

另外嘗試添加--osscan-guess; --fuzzy --osscan-guess; --fuzzy以獲得最佳效果。 例:

nmap -O -v --osscan-guess ip

然后只搜索iOS設備關鍵字的輸出(請參閱此示例 )。 這是人類可讀的。 請注意,您需要以管理員身份運行所有這些才能正常工作(Windows: runas ,其他: sudo )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM