【问题标题】:ip module returning different ip addressesip 模块返回不同的 ip 地址
【发布时间】:2019-11-01 03:18:11
【问题描述】:

我正在使用 npm 的 ip 库。 我有两个配置文件,一个用于 React,一个用于 Node,用于同一个应用程序。

const ip = require('ip');
console.log(ip.address());

这会为 React 配置文件(在 src 文件夹 -127.0.0.1 内)和节点服务器文件(在 src 文件夹外 - IPv4 地址)返回不同的 IP 地址。

问题是我很确定我之前运行了完全相同的代码,并且它为我提供了相同的 IP 地址,因为那时我能够访问我的网页。我需要相同的 ip 来向我的节点后端发出请求,我在生产中负担不起。还有其他明确的方法吗?

【问题讨论】:

    标签: node.js reactjs localhost ip


    【解决方案1】:

    您得到不同的 ip 结果,因为 2 个方法调用 ip.address() 使用不同的网络接口。

    要使ip.address()返回相同的结果,可以将网络接口名称作为第一个参数传递,例如en0

    const ip = require('ip');
    console.log(ip.address('en0'));
    

    附言要获取当前所有网络接口名称,可以使用os.networkInterfaces()

    更新:OP 尝试在浏览器端的 React 代码中获取 IP 地址。这是不可能完成的任务。否则会带来巨大的安全问题。

    更新 2:出于安全原因,OP 不想将端点 IP 地址存储在前端代码中,也不想先检索 IP 地址(网络开销问题)。在这种情况下,您可以在服务器中创建代理。所有前端都知道与当前服务器交互,数据交换由服务器传递:

    浏览器服务器各种端点IP

    步骤如下:

    1. 服务器(托管前端代码)从浏览器获取请求
    2. 服务器检查哪个端点将用于该客户端
    3. 服务器将请求发送到特定端点
    4. 服务器从端点获取响应
    5. 服务器将上述步骤中的响应返回给浏览器

    【讨论】:

    • 'en0' 不起作用:TypeError: Cannot read property 'filter' of undefined
    • @AbdulAhad en0 只是一个例子。不同的计算机和操作系统具有不同的网络接口名称。您需要首先列出当前的网络接口名称。通过 Node.js 中的 os.networkInterfaces() 或运行命令 ifconfigipconfig
    • os.networkInterfaces() 当我在服务器文件中运行它时运行完美,但在 src 文件夹内的 react 配置文件中,它显示一个空对象。
    • 不幸的是,没有。在浏览器中获取操作系统级别的网络信息是不可能的。否则,将是巨大的安全问题。
    • 啊,也许你可以使用代理。请检查我的答案更新。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-21
    • 1970-01-01
    • 2012-03-02
    • 2021-01-03
    • 2013-07-02
    • 2019-11-13
    • 2019-01-04
    相关资源
    最近更新 更多