【问题标题】:Discover Web Service in local private network with javascript使用 javascript 在本地专用网络中发现 Web 服务
【发布时间】:2021-05-16 20:34:41
【问题描述】:

我搜索了一些关于我的问题的选项,但遗憾的是找不到任何有用的信息。

这是我的问题:

假设我有 1 台计算机在特定端口上运行休息服务,比如说 5555,在专用网络中运行。

现在我有一个可以用手机或电脑打开的前端/浏览器应用程序 (javascript)。当设备连接到同一网络(假设是无线网络)并打开前端应用程序时,它应该以任何方式发现另一台计算机的其余服务,但我找不到解决该挑战的方法。

所以我无法在网络中找到服务的 ipv4,因为 webRTC 解决方法被破坏了。我必须遍历所有可能的私有 IP 范围才能找到正在运行的服务,这似乎有点过头了。

有人知道如何解决这个挑战吗?

【问题讨论】:

    标签: javascript rest web-services networking service-discovery


    【解决方案1】:

    大多数网络应用程序实际上都使用端口扫描方法,而您正试图避免这种方法。我可以想到一些其他的方法:

    • 让服务也以特定名称发布 mDNS 服务,例如foo.local。您的 Web 应用程序可以简单地使用该主机名进行静态配置。但是,这将要求您能够控制服务,并且您的网络/主机需要能够使用 mDNS。
    • 要求服务管理员在公共 DNS 服务器中注册本地 IP 地址。这将需要在网络应用程序中手动配置 URL,但您至少可以避免处理发现地址的问题。

    【讨论】:

    • 我明白了。这对于非 Web 应用程序来说非常简单,因为它们可以轻松确定自己的 ipv4,并且只需遍历 254 台主机即可查看正在运行的主机。这可能就是在网络中检测到打印机的方式。我正在考虑获取路由器信息,以便我可以缩小搜索范围,因为它们使用预先配置的私有 IP 范围。另一种方法是确定网关,然后从那里遍历 255 台主机。但是通过浏览器与网关通信似乎是另一个挑战。你怎么看?
    • 我同意,找到网关可能和找到本地子网一样困难。另外,请记住,255 只是一种可能的子网大小 - 10.0.0.0/8 子网是 16mio 地址大。也许您可以详细说明您要避免的事情?例如如果您不想接触服务器 ID,建议使用 DNS 服务器 - 如果您想避免更改网络中的某些内容,您可以使用 mDNS 方法。另一种简单的方法是让 Web 服务器找出它的 LAN IP,然后将其发送到实际的 DNS 服务器,因为许多 DNS 主机都有 API。
    • @PssstZzz 似乎可以从浏览器使用 mDNS:soledadpenades.com/posts/2015/… 我很好奇,如果你能做到,请告诉我!
    • @inf3rno 这听起来像是一个有趣的库,但鉴于它依赖于很少可用的 firefox API,它可能不是生产级方法。我的想法是甚至不使用 mDNS 的交互式服务发现,而是让服务器始终宣布相同的域(例如 restservice.local)并在您的前端始终连接到该主机名。这将适用于我的主机,这些主机实际上使用 mDNS 守护进程来解析名称。
    【解决方案2】:

    您所说的是一种网络扫描,如果您能做到的话,这是一个安全问题,尽管在家庭网络中通常是可能的。我会为该本地网络添加一个 DNS 服务器,并使用本地域名来访问该服务。我不知道任何其他标准方式来传播服务所在的位置。

    【讨论】:

    • 我明白了,这意味着在路由器上配置 DNS,这增加了我试图避免的更多工作。那我再想想,谢谢你的回答!
    猜你喜欢
    • 2015-10-20
    • 1970-01-01
    • 1970-01-01
    • 2020-09-08
    • 2022-01-14
    • 2014-08-03
    • 1970-01-01
    • 2012-11-28
    • 2011-12-17
    相关资源
    最近更新 更多