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

Posted

技术标签:

【中文标题】如何使用 express 框架通过 node.js 获取远程客户端的本地 IP 地址?【英文标题】:How do i get local ip address of a remote client with node.js using express framework? 【发布时间】:2018-12-07 10:49:02 【问题描述】:

我刚刚遇到了一个任务,我需要获取正在访问我们服务器上的 REST api 的远程客户端的本地 IP 地址,我没有使用任何负载均衡器(因为我现在对此一无所知),我的应用程序在我的电脑上本地运行,我使用工具 ngrok 将其暴露在互联网上,该工具托管我的应用程序并使其可以访问互联网。我将与您分享我到目前为止所做的事情,但这并不能满足我的需要,因为它只获取远程客户端的公共 IP 地址,这意味着,如果两个不同的用户从同一网络访问 API,则使用此代码,他们的 ip 地址报告相同,

RedisRouter.post('/incrementvisit', async (req: Request, res: Response, next: NextFunction) => 
try 
    console.log('req.ip', req.ip);
    console.log('request.connection.remoteAddress==================================', req.connection.remoteAddress);
    var ip = req.headers['x-forwarded-for'];
    console.log('ip from headers -------------->', ip);

    console.log('api after trimming', ip);
    res.send(await rs.visitCounter(req.body.name,ip));
 catch (error) 
    console.log(error);
    next(error);

);

`对于从同一网络请求 api 的所有用户,这总是给我相同的 ip 地址,这是他们的公共 IP 地址,而不是本地地址。基本上,我的需要是跟踪 ping 我们的 API 的不同用户的数量,并且我不能将相同的 IP 地址作为两个不同的人从同一网络请求 API。

另外,请向我推荐一些关于为开发人员使用 Web 代理和 Web 网络的入门级读物。 谢谢你,祝福你。

【问题讨论】:

【参考方案1】:

我不确定 ngrok 正在运行什么服务器,但你尝试过吗:

var ip = req.headers["x-real-ip"]

【讨论】:

报告为未定义。 是的......我可以看到有人在这里遇到了问题:***.com/questions/37668942/… 我不确定你是否有可能,除非你自己托管,例如使用 nginx,而不是使用隧道

以上是关于如何使用 express 框架通过 node.js 获取远程客户端的本地 IP 地址?的主要内容,如果未能解决你的问题,请参考以下文章

node.js框架express的安装

Node.js Express 框架

Node.js Express 框架

Node.js:Express 框架

如何评价 Node.js 的koa框架

Node.js入门教程 第五篇 (Express框架)