在本地网络前端中找出后端的本地 IP 地址。 JavaScript 中的动态

Posted

技术标签:

【中文标题】在本地网络前端中找出后端的本地 IP 地址。 JavaScript 中的动态【英文标题】:Find out local IP address of the backend in a local network frontend. Dynamic in JavaScript 【发布时间】:2020-01-08 10:05:05 【问题描述】:

我有一个 docker 后端和前端在树莓派上的本地网络中运行。如果我现在通过树莓派 IP 地址和正确的端口从网络中的另一台设备访问前端,则前端可以工作,但我的前端没有正确的后端 IP 地址。如果 pi 连接到另一个网络,IP 可能会更改,因此静态 ips 不起作用。如果 localhost 被用作 IP,如果前端是 pi 上的 openend,它就可以工作,但如果它在另一个设备上打开,则 localhost 是错误的。

所以我现在的问题是,如何使用 java 脚本代码在我的前端找到后端的 IP 地址。我需要纯粹通过浏览器端的java脚本来获取后端IP。

我已经尝试将 dns 包用于节点,但这只是用于我不想拥有或查找的外部 IP 地址。我只想找出本地地址,因为我的系统应该只能在本地访问。

编辑:

想法:我可以在 JS 代码(window.location.href)中获取我的前端的 URL,但是如果设置了主机名,htat 可能不是 IP 地址,并且它可能 opr 可能不包含除了端口之外的端口ip/主机名。所以我也无法在每种情况下都获得IP地址。

编辑 2: 现在我解决了这个问题,只需通过 window.location.href 获取 URL,并在“:”之前删除 ip/hostname。但这仅适用于您坚持需要指定并放入 URL 的端口。但它可以作为一种解决方法,直到我找到更好的解决方案。

【问题讨论】:

The IP may change if the pi is connedcted to another network ...... I just want to find out the local address because my system should only be accessible locally. ...如果 Pi 与“前端”不在同一个 LAN 上,则您无法在本地访问它。 是的,这是正确的,但后端和前端始终在 pi 上运行。所以它们总是在同一个网络(后端和前端)中,但是如果它们(后端和前端)都移动到另一个网络,后端就不具有相同的 IP 地址。 如果设备在不同的 ip 上则无法工作,或者您必须为后端设备使用静态 ip 地址 你是什么意思后端和前端都在pi上运行。这个问题越来越没有意义了。 对不起 XD 我真的试着解释清楚:后端 --> Docker NodeJS/Express 运行在 PI 前端 --> Docker ReactJS 运行在 PI 访问:从另一个设备(例如笔记本电脑): 后端访问:: 现在我需要在前端 JS 代码中找出笔记本电脑上的 pi-ip 【参考方案1】:

您可以在 for 循环中使用 if/else 条件来检查哪个 IP 地址为您提供了所需的响应:

for(var n=1; n<24)  // connect to 192.168.0.n 
    if (/* gives you replay */) 
        return;
     else 
        // continue the loop
    

如果 IP 和端口给你响应,那么你连接到那个。

【讨论】:

它可能会起作用。或者你最终可能会连接到你的智能冰箱。 这是个好主意,但我如何才能确定本地地址始终采用以下形式:192.168.0.n。它可能是 192.168.x.n,甚至是类似:10.x.x.x? 这是我要解释的逻辑 路由器的最后一个八位字节一般不是01吗?只需扫描第三个八位字节以找到路由器,然后扫描网络的其余部分。这应该在 99% 的情况下有效。

以上是关于在本地网络前端中找出后端的本地 IP 地址。 JavaScript 中的动态的主要内容,如果未能解决你的问题,请参考以下文章

我的本地连接现在“网络未分配网络地址 ”,点击修复“无法续订ip地址”

如何在网络上自动获取本地IP地址及其原理

NAT虚拟网络配置

如何使用 express 框架通过 node.js 获取远程客户端的本地 IP 地址?

Wildfly 在本地网络中独立

本地安装wordpress后,主机的ip地址是多少?