使用 SSDP 显示网络中的所有设备

Using SSDP to display all devices in network

我经常用谷歌搜索这个问题,但对于我到底想做什么是否可行仍然有点困惑。

基本上,我正在尝试向我的 Web 应用程序添加一个下拉菜单,其中列出了连接到网络的所有设备。当我说设备时,我并不是在谈论所有设备;我说的是我正在使用的某些实现了 SSDP 的硬件设备。我已经创建了 Node.js 发送 M-SEARChes 并成功找到所有设备的程序,但我知道 Node.js 不是浏览器 javascript 并且我无法显示输出在浏览器的终端中调用 Node(如果我错了,请纠正我)。

在对其进行更多研究后,我意识到在浏览器上执行此类操作时的替代方法是创建某种 Chrome 能够执行 SSDP 的扩展并发送 M-搜索,或使用 websocket API 打开 websockets(不要认为这对我的 SSDP 特别有用,但我可能是错的)。

考虑到我正在尝试做的事情,这些备选方案是否有用。我正在尝试做的事情有可能吗?再一次,我对这个话题做了研究,但我真的没能找到明确的答案。如果可能的话,我非常感谢指向教程的链接或关于如何完成我正在尝试做的事情的一般想法。

我知道我最近在 Whosebug 上发布了一些关于这个的东西,没有得到任何答案或回复,但我对这个主题做了更多的研究,感觉我确实有了更好的理解。话虽这么说,但我仍然希望获得有关如何解决此问题的指导,因为我在网上找不到任何有用的东西。

感谢您的宝贵时间!

据我所知,

Chrome 扩展无法访问 sockets.udp API。在 Chrome 中执行此操作的正确位置可能是 Chrome 应用程序,因为他们可以进行 UDP 多播:https://codereview.chromium.org/12684008/ . In fact there seems to be an SSDP app 已经...

不幸的是 Chrome 应用程序 have been deprecated 支持普通网络应用程序(至少 Chrome OS 之外),正如您发现的那样'尚未通过普通网络 API 执行 SSDP。套接字 API 正在工作中,但不知道它们是否以及何时可以解决允许随机网络应用程序执行诸如加入本地多播组之类的操作所固有的安全问题。

Websockets 不太可能提供您需要的东西。

有可能。

Node.js is not a browser javascript and there is no way I could display the output of a Node call in a terminal on a browser

他们都 运行 Javascript。 运行 终端中的 nodjs 或者如果终端不可访问则将输出通过管道传输到文本文件。在这两种情况下 console.log() 应该能够打印出来。

对于客户端和服务器端的 SSDP,请使用:https://www.npmjs.com/package/node-ssdp

您不需要专门使用 Chrome 应用程序。您可以在基于 Javascript 的跨平台框架(如 Electron)中编写应用程序。它将成为一个功能齐全的 'web'-PC 应用程序和移动设备,您可以使用 Cordova 等。