当前位置: 首页 > 知识库问答 >
问题:

Express.js:如何获取远程客户端地址

万俟铭
2023-03-14

我不完全理解如何获得远程用户IP地址。

假设我有一个简单的请求路由,例如:

app.get(/, function (req, res){
   var forwardedIpsStr = req.header('x-forwarded-for');
   var IP = '';

   if (forwardedIpsStr) {
      IP = forwardedIps = forwardedIpsStr.split(',')[0];  
   }
});

上面的方法是正确的,还是有更好的方法来获得真正的用户IP地址?代理呢?

共有3个答案

柳胡媚
2023-03-14

nginx.conf文件中:
proxy\u set\u头X-Real-IP$remote\u addr

node.js服务器文件中:
var ip=req.headers['x-real-ip']||req.connection.remote地址;

请注意,express小写标题

阎安邦
2023-03-14

虽然@alessioalex的答案是有效的,但还有另一种方法,如《快速指南》中“代理背后的快车”一节所述。

  1. app.set('trust proxy',true)添加到您的express初始化代码中。

可选阅读:

  • 使用req.ipreq.ip<代码>请求连接.远程地址不适用于此解决方案。
唐海阳
2023-03-14

如果您在NGiNX之类的代理之后运行,那么您只需检查'x-forwarded-for'

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

如果代理不是您的,我不会信任'x-转发-for'头,因为它可能被欺骗。

 类似资料:
  • 问题内容: 我不完全了解如何获取远程用户IP地址。 假设我有一个简单的请求路由,例如: 以上方法是正确的以获得真实用户IP地址还是有更好的方法?代理呢? 问题答案: 如果您是在像NGiNX这样的代理服务器上运行或者只有什么,那么您应该检查’x-forwarded-for’: 如果代理不是“您的”,那么我将不信任“ x-forward-for”标头,因为它可能是被欺骗的。

  • get_client_ip($type = 0, $adv = false) 功能 获取客户端IP地址 参数 $type: string 返回类型 0 返回IP地址 1 返回IPV4地址数字 $adv: boolean 是否进行高级模式获取(有可能被伪装) 返回 string 客户端IP地址

  • 问题内容: 我已经在项目中编写了Rest Web服务.Web服务调用可能来自其他计算机。因此我需要通过REST Web服务来查找IP地址。 通过此链接 request.getRemoteAddr() 来使用它。 但是我不能使用getRemoteAddr()。因为我的请求和响应都是xml格式。 我在REST服务.Tomcat服务器中使用了post方法。我已将请求发送为xml格式。 我如何获得IP地址

  • get_client_ip($type = 0, $adv = false) 功能 获取客户端IP地址 参数 $type: string 返回类型 0 返回IP地址 1 返回IPV4地址数字 $adv: boolean 是否进行高级模式获取(有可能被伪装) 返回 string 客户端IP地址

  • 问题内容: 我正在尝试开发一个Java Web应用程序(Servlet),该服务器需要获取客户端IP地址。 以下是我到目前为止的代码: 在大多数情况下,我会得到“默认网关地址”(147.120.1.5)。不是我的机器IP地址(174.120.100.17)。 在大多数情况下,我会得到“默认网关地址”(147.120.1.5)。不是我的机器IP地址(174.120.100.17)。 在这种情况下,我

  • 问题内容: 我正在尝试在Laravel中获取客户端的IP地址。 使用可以很容易地在PHP中获得客户端的IP 。在核心PHP中它可以正常工作,但是当我在Laravel中使用相同的东西时,它将返回服务器IP而不是访问者的IP。 问题答案: 查看Laravel API: 在内部,它使用Symfony Request对象中的方法: