如何用Nodejs获取访问者的公网IP?

如何用Nodejs获取访问者的公网IP?

如何用node.js 获取访问者的公网IP?

9 回复

当然可以!以下是关于如何使用 Node.js 获取访问者公网 IP 的详细解答。

如何用 Node.js 获取访问者的公网 IP?

在 Web 开发中,有时需要知道访问者的公网 IP 地址。这可以通过一个简单的 Node.js 应用来实现。以下是一个示例代码,展示如何使用 Node.js 和 express 框架来获取访问者的公网 IP 地址。

步骤 1: 安装必要的依赖

首先,确保你已经安装了 Node.js 和 npm(Node 包管理器)。然后创建一个新的项目目录并初始化 npm:

mkdir public-ip-app
cd public-ip-app
npm init -y

接下来,安装 expressrequest 包,用于搭建 HTTP 服务器和发送 HTTP 请求:

npm install express request

步骤 2: 编写 Node.js 应用程序

创建一个名为 app.js 的文件,并添加以下代码:

const express = require('express');
const request = require('request');

const app = express();

app.get('/', (req, res) => {
    // 使用 ipify API 获取公网 IP 地址
    const apiUrl = 'https://api.ipify.org?format=json';

    request(apiUrl, { json: true }, (err, response, body) => {
        if (err) {
            res.status(500).send({ error: 'Failed to fetch public IP' });
            return;
        }

        if (response.statusCode !== 200) {
            res.status(500).send({ error: 'Unexpected status code from IP service' });
            return;
        }

        res.send(`Your public IP is: ${body.ip}`);
    });
});

const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
    console.log(`Server is running on port ${PORT}`);
});

解释

  • Express: 我们使用 Express 框架来创建一个简单的 HTTP 服务器。
  • Request: 使用 request 库来向外部 API 发送请求。在这个例子中,我们使用 ipify 提供的 API 来获取公网 IP 地址。
  • API 调用: https://api.ipify.org?format=json 是一个公共 API,它返回 JSON 格式的公网 IP 地址。
  • 响应处理: 如果请求成功,我们将公网 IP 地址返回给客户端。如果发生错误,则返回相应的错误信息。

运行应用

现在你可以运行这个应用了:

node app.js

打开浏览器并访问 http://localhost:3000,你应该会看到类似如下的输出:

Your public IP is: 123.45.67.89

这就是如何使用 Node.js 获取访问者的公网 IP 地址的基本方法。希望这对您有帮助!


顺便问一下,如何用最简单的非异步的方式获取本机ip地址

我给你一个function,是目前我的网站正在使用的http://sogego.com

exports.getClientIP = function(req){ var ipAddress; var headers = req.headers; var forwardedIpsStr = headers[‘x-real-ip’] || headers[‘x-forwarded-for’]; forwardedIpsStr ? ipAddress = forwardedIpsStr : ipAddress = null; if (!ipAddress) { ipAddress = req.connection.remoteAddress; } return ipAddress; }

这个方法可以判断你是否使用了nginx和一般情况

TJ的superagent都用了

var ip = req.headers[‘x-forwarded-for’] || req.connection.remoteAddress || req.socket.remoteAddress || req.connection.socket.remoteAddress;

用了 os.networkInterfaces() 依然获取不到 公网 IP 上图:

63CC3EA5-EB48-4554-894A-F8365842364E.png

要使用 Node.js 获取访问者的公网 IP 地址,可以通过调用一个公网 IP 查询服务来实现。以下是具体步骤和示例代码:

  1. 选择一个公网 IP 查询服务:有许多免费的服务可以提供这一功能,例如 https://api.ipify.org?format=json

  2. 发送 HTTP 请求获取数据:可以使用 Node.js 的内置模块 http 或者第三方库如 axios 来发送请求并获取数据。

以下是一个使用 axios 库的示例代码:

const axios = require('axios');

async function getPublicIP() {
    try {
        const response = await axios.get('https://api.ipify.org?format=json');
        console.log("Public IP Address:", response.data.ip);
    } catch (error) {
        console.error("Error fetching public IP:", error.message);
    }
}

getPublicIP();

解释:

  • axios: 是一个流行的 HTTP 客户端库,它简化了发送网络请求的过程。
  • axios.get(): 发送一个 GET 请求到指定的 URL,并返回一个 Promise。
  • response.data.ip: 假设 API 返回的数据格式为 { "ip": "xx.xx.xx.xx" },这里提取出公网 IP 地址。

注意事项:

  • 确保已经在项目中安装了 axios,可以使用命令 npm install axios 进行安装。
  • 公网 IP 查询服务可能有限制或需要 API key,具体情况请查阅该服务的文档。

通过这种方式,你可以轻松地从客户端获取并打印用户的公网 IP 地址。

回到顶部