python - 尝试使用 python 脚本在我的网络上发现 iOS 设备

标签 python ios bonjour

尝试使用 pybonjour 但不确定它是否是我需要的。 https://code.google.com/p/pybonjour/

我希望能够自动发现出现在我的网络上的 iOS 设备,稍后将基于此运行脚本,但首先我想在它出现/消失在我的 wifi 网络上时立即发现它。

那么问题来了,我该怎么做?在安装了 python27 和 pybonjour 包的 Windows 机器上运行,这两个示例在 pybonjour 页面上运行,但是我运行什么命令来使用网络中包含的脚本发现 iOS 设备?或者这只会在我运行此脚本的我的电脑上运行的发现服务!

如果我走错了方向,请告诉我,我似乎找不到有关此软件包的文档!

python browse_and_resolve.py xxxxxx

谢谢
马特。

更新...

这篇文章和浏览器很有帮助,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 TV 除外)不要宣传任何服务,除非您运行的应用程序使用 Bonjour 在其他机器上查找相同的应用程序。 (越狱设备除外,这些设备经常会宣传 SSH、AFP 等)

有几种方法可以间接获得网络上任何人所宣传的所有服务的列表。最简单的大概就是用Bonjour Browser for Windows . (我从来没有真正使用过它,但是我使用过的原始 Mac 工具和 Java 端口都为 Windows 用户推荐了这个 Windows 端口。)启动它,你会得到一个服务列表,然后您可以单击每一项以获取详细信息。

因此,您可以验证您的 iPhone 和 iPad 没有为任何服务做广告,这将表明无法通过 Bonjour 检测到它们。

同时,即使您确实找到了设备,您打算做什么?想必您想以某种方式与设备通信,对吗?无论您尝试与之通信的服务是什么……只需浏览该服务——然后,如果合适,过滤到 iOS 设备。这比浏览 iOS 设备然后过滤到那些拥有您想要的服务的设备要容易得多。

至于有没有办法检测iOS设备……嗯,至少有两种可能。我不知道它们中的任何一个是否会起作用,但是......

首先,即使 iOS 设备没有为您做广告,我认为它正在浏览您可以做广告的服务。否则它如何发现有 Apple TV 到 AirTunes,局域网上有一个 iTunes 同步,等等?

因此,请使用 Bonjour 浏览器获取运行 iTunes 的桌面、Apple TV 等正在宣传的所有服务的列表。然后关闭桌面上的所有服务,使用 PyBonjour 来宣传任何看起来似乎相关的服务(并且,如果需要,使用 netcat 在您宣传的端口上放置琐碎的监听器)。然后打开你的 iPhone,看看它是否连接到其中任何一个。您可能想让它运行一段时间,或者关闭 WiFi 并重新打开。 (我猜,尽管 Apple 提出了建议,但它不会连续浏览大多数服务,而是每隔一段时间和/或每次网络状态发生变化时检查一次。毕竟,Apple 的建议是针对前台交互式应用程序的,不是后台服务。)

不幸的是,即使您可以找到所有 iOS 设备都可以连接的服务,您可能无法仅通过在那里建立连接来区分 iOS 设备和其他设备。例如,我很确定任何运行 iTunes 的 Mac 或 Windows 机器都会访问你的假 AirTunes 服务,任何 Mac 都会访问你的 AirPrint,等等。那么,您如何将其与 iPhone 击中它区分开来呢?您可能需要实际提供足够的协议(protocol)才能从中获取信息。这对于 Apple 未公开的协议(protocol)来说尤其困难。

但希望你会很幸运,所有 iOS 设备都会有一些东西,而不是其他东西,都想与之交谈。 iTunes Sync 似乎是显而易见的可能性。

或者,他们必须广播一些事情,否则他们就行不通。没有广播,您就无法接入 WiFi 网络。大多数家庭 WiFi 网络使用 DHCP,这意味着它们也必须广播 DHCP 发现(和请求)。您可以在这些消息中检测到某种启发式签名。如果不出意外,启用 DDNS 应该会导致设备发送其主机名,您可以根据它进行猜测(例如,除非您更改默认值, hostname.lower().endswith('iphone') )。

最简单的方法可能是将桌面设置为家庭网络的主要接入点。我相信这就像在控制面板中的某处打开 Internet 连接共享一样简单。 (设置为 DHCP 中继代理的开销比设置完整的路由器要少得多,但我不知道你是如何开始在 Windows 上这样做的。)然后你可以捕获 DHCP 广播(或者,如果失败, 802.11 广播)进入时。Wireshark将轻松为您捕获和解析消息,因此您可以观看并查看它是否值得进一步研究。 (有关格式的详细信息,请参阅 RFC 2131,这些格式在 Wireshark 的神秘单行描述中并不明显。)

您可以更进一步,观察每个主机在连接到 Internet 后进行的 Internet 连接。任何定期检查 App Store、iOS 升级服务器等的设备......好吧,除非有一个越狱开发团队的人住在你家,那可能是 iPhone,对吧?缺点是其中一些检查可能非常周期性,并且在 iPhone 连接到您的网络 6 小时后检测到它并不是很令人兴奋。

关于python - 尝试使用 python 脚本在我的网络上发现 iOS 设备,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16473379/

相关文章:

ios - "idleTimerDisabled"在 didFinishLaunchingWithOptions 中如何工作?

iphone - 服务器/客户端iphone应用程序的任何示例,其中服务器和客户端均为iOS设备?

python - 如何使用 Bio.Geo 读取某些 GEO 文件?

ios - 如何使用 RxSwift 观察 UITextField 中的文本变化?

ios - 远程显示框架

cocos2d-iphone - 任何展示如何使用游戏套件(服务器-客户端模型)而无需(!)GKPeerPickerController 和 2 个以上设备的示例项目?

ios - 在同一wifi网络中选择什么数据共享: Multipeer, Bonjour,Socket连接

javascript - Selenium WebDriver Python重新加载html而不刷新页面

python - 来自守护进程 : OCI runtime create failed: container_linux. 的错误响应 go:380:启动容器进程导致:exec: "python":

python - 从(行、列、值)数据创建 Pandas DataFrame