【问题标题】:Getting Client Ip on NODE.JS Through Cloudflare通过 Cloudflare 在 NODE.JS 上获取客户端 IP
【发布时间】:2015-12-31 21:05:28
【问题描述】:

我目前正在使用

数据["ip"] = socket.client.conn.remoteAddress;;

但这只会向我显示 cloudflare IP,我不喜欢泄露我的服务器的 ip,所以我怎样才能通过 cloudflare 获取我的客户端的 ip?

【问题讨论】:

  • 这是来自客户端的什么类型的连接? HTTP?套接字.io?普通的 webSocket?
  • 它有点像 socket.io 通过 TCP / HTTPS

标签: node.js ip cloudflare


【解决方案1】:

在我研究了几个小时后,我发现了。
socket.client.request.headers['cf-connecting-ip']

【讨论】:

  • 我敢肯定,你为我节省了更多时间。谢谢!
【解决方案2】:

This thread 表示在 socket.io 1+ 中,您应该使用:

socket.request.connection.remoteAddress

或:

socket.handshake.address

但是,如果路径中有 cloudfare 代理服务器(可能有),那么只有当 cloudfare 代理服务器在代理初始化 socket.io 连接的初始 HTTP 连接。

【讨论】:

  • 它最终还是给了我 cloudflare Ips... data["ip"] = socket.request.connection.remoteAddress; //i.imgur.com/ZfjoZnF.png
  • @Predator - 那么问题出在 cloudFare 上。正如我在回答中所说,为了查看实际的客户端 IP,代理必须以标准方式(作为特定的 HTTP 标头)传递该 IP 地址,因为您的服务器看到的实际 TCP 连接来自代理,而不是来自客户。
  • 好吧,cloudflare 确实有自己的标头,那么我该如何使用它来获取客户端的 ip?
  • @Predator - socket.handshake.headers 将包含来自原始连接请求的标头,因此如果 cloudFare 将原始 IP 地址放入标头中,它应该位于 socket.handshake.headers 对象中。
猜你喜欢
  • 2013-10-16
  • 2019-12-17
  • 2019-02-10
  • 1970-01-01
  • 2018-12-25
  • 1970-01-01
  • 2020-12-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多