如何确定节点中用户的 IP地址

如何从控制器中确定给定请求的 IP地址?例如(在 express 中):

如何从控制器中确定给定请求的 IP地址?例如(在 express 中):

app.post('/get/ip/address', function (req, res) {
    // need access to IP address here
})
590

在您的request对象中有一个名为socket的属性,它是一个net.Socket对象。net.Socket对象有一个属性remoteAddress,因此您应该能够通过此调用获得 IP:

request.socket.remoteAddress

(如果您的节点版本低于 13,请立即使用已弃用的request.connection.remoteAddress

EDIT

正如 @ juand 在评论中指出的那样,如果服务器位于后面,则获取远程 IP 的正确方法是request.headers['x-forwarded-for']

EDIT2

express与 Node.js 一起使用时:

如果设置app.set('trust proxy', true),则req.ip将返回真实 IP 地址,即使在后面。Check the documentation for further information

515
var ip = req.headers['x-forwarded-for'] ||
     req.socket.remoteAddress ||
     null;

请注意,有时您可以在req.headers['x-forwarded-for']中获取多个 IP 地址。此外,x-forwarded-for标头不会始终设置,这可能会引发错误。

该字段的一般格式为:

x-forwarded-for:client,proxy1,proxy2,proxy3

其中值是一个以逗号 + 空格分隔的 IP 地址列表,最左边的是原始客户端,每个传递请求的后续都添加了从中接收请求的 IP 地址。在此示例中,请求通过proxy1proxy2,然后通过proxy3proxy3显示为请求的远程地址。

这是Arnav Gupta建议的解决方案,其中Martin在的注释中针对未设置x-forwarded-for的情况提出了建议:

var ip = (req.headers['x-forwarded-for'] || '').split(',').pop().trim() || 
         req.socket.remoteAddress

使用现代 JS 的建议:

处理x-forwarded-for只有当设置,如果是这样,采取的第一个地址

其他参数使用optional chaining (?.)

const pIp = (req) =>
    req.headers['x-forwarded-for']?.split(',').shift()
    || req.socket?.remoteAddress
console.log(pIp(req))
// => 127.0.0.1
137

如果使用 express...

req.ip

我在查这个,然后我想等等,我在用快递。废话。

35

您可以保留DRY,只使用node-ipware,它同时支持IPv4IPv6

Install:
npm install ipware

在您的 app.js 或中间件中:

var getIP = require('ipware')().get_ip;
app.use(function(req, res, next) {
    var ipInfo = getIP(req);
    console.log(ipInfo);
    // { clientIp: '127.0.0.1', clientIpRoutable: false }
    next();
});

它将尽最大努力获取用户的 IP 地址,或返回127.0.0.1表示无法确定用户的 IP 地址。请查看README文件中的高级选项。

本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处

(190)
如何从谷歌静态地图Api卫星图像获取日期信息
上一篇
Android Studio媒体播放器如何淡入和淡出
下一篇

相关推荐

  • ios 获取ip地址:如何在iOS上获取IP地址

    iOS 获取 IP 地址的方法有很多种,下面介绍一种基于 C 语言的方法:需要在 iOS 的头文件中引入相关的头文件:…

    2023-12-26 10:01:32
    0 94 14
  • ios海马助手让您的iPhone更便捷、更安全

    iOS海马助手是一款iOS开发者工具,主要用于调试iOS应用程序。它可以帮助开发者快速定位和修复问题,提升应用程序的性能,改善用户体验。…

    2024-04-06 04:41:55
    0 11 84
  • ios双开软件:让你的iPhone轻松双开!

    iOS双开软件是一种技术,它允许用户同时运行两个不同的应用程序,而不会影响到彼此。它可以让用户在同一台设备上安装两个不同的应用程序,并在不同的账户之间切换,从而实现双开功能。要实现iOS双开,需要使用Xcode IDE(Integrated Development Environment)来编写代码。下面是一段示例代码,可以帮助你实现iOS双开:…

    2023-04-21 13:08:46
    0 63 94
  • ios 越狱源解锁你的iPhone,让你拥有更多自由度!

    iOS越狱源是一个用于越狱iOS设备的开放源代码库,它包含了所有必要的文件和工具,以便在iOS设备上实现越狱。iOS越狱源的代码如下:…

    2024-01-06 09:39:22
    0 11 37
  • ios怎么连接电脑:如何使用iPhone连接电脑?

    你需要在电脑上安装iTunes,这是一款由苹果公司推出的多媒体管理软件。然后,将iPhone连接到电脑上,并打开iTunes软件。…

    2023-05-25 08:47:47
    0 39 50
  • ios如何打开zip:如何在iOS设备上打开zip文件

    iOS可以使用第三方应用软件来打开zip文件,也可以使用苹果原生的Unzip功能来打开zip文件。使用第三方应用软件打开zip文件…

    2023-03-07 09:08:20
    0 67 70
  • ios内存修改器免越狱轻松解锁iPhone的免越狱功能

    iOS内存修改器免越狱是一种可以在iOS设备上修改系统内存的工具,无需越狱就可以实现。它可以在不影响系统稳定性的情况下,更改系统内存中的各种参数,从而达到优化系统性能的目的。…

    2023-03-07 02:15:25
    0 59 40
  • ios历史版本下载从iPhone OS 1.0到iOS 14

    要下载iOS历史版本,首先需要在Apple官网上注册一个开发者账号,然后登录到Apple官网,在“Downloads”页面中选择你想要下载的iOS版本,点击“Download”按钮即可开始下载。…

    2023-01-24 07:29:26
    0 28 69

发表评论

登录 后才能评论

评论列表(42条)