gpt4 book ai didi

javascript - 为什么我无法在运行 Openshift 托管的 Node.js + Websocket 的服务器上获取连接客户端的 ip 地址(使用 WebSocket-Node)

转载 作者:搜寻专家 更新时间:2023-11-01 00:07:45 24 4
gpt4 key购买 nike

我正在使用由 openshift 托管的 Node.js 0.10 + WebSocket-Node ( Seen here ),仅此而已,我没有使用 express。除了无法获得任何连接客户端的 ip 地址之外,服务器在其他方面的行为完全符合预期,并且可以很好地处理 websocket 请求和连接。

我已经完成了作业,我知道 openshift 在反向代理后面,应该查询 x-forwarded-for header 以获得正确的 ip。但是,WebSocketRequest.remoteAddress 属性(如果存在,则意味着从 X-Forwarded-For header 中获取其返回的 ip)返回 OPENSHIFT_NODEJS_IP 的值(如 rhc env 中所列),这大概是服务器的 ip。此外,我手动浏览了 WebSocketRequest.httpRequest 对象(这是对原始 Node HTTP 请求对象的引用)并且在那里找不到任何 x-forwarded-for header 的踪迹,(虽然我不会假装知识渊博,足以理解我在那里看到的东西。)

我的服务器还处理标准 HTTP 请求,当我检查 request.headers['x-forwarded-for'] 时,这些请求DO 返回客户端 ip,遗憾的是,这无助于获取客户端的 IP虽然通过 websocket 连接,因为它们不会触发标准的 HTTP 响应。

我一定在这里遗漏了一些东西,非常感谢任何人可以提供的任何新的调查途径或巧妙的解决方法。

最佳答案

您可以在套接字连接时探测每个客户端的 IP 地址。
你可以使用类似的东西:http://jsonip.com/?callback
jsonip.com 请求返回以下对象:

{"ip":"XXX.XXX.XXX.XXX","about":"/about","Pro!":"http://getjsonip.com"}

即使您信任客户也不总是最好的方法,
这里有一个探测场景的客户端示例:

socket.on('PROBE', function(){
$.getJSON('http://jsonip.com/?callback=?', function(r){
var myIP = r.ip;
socket.emit('C_IP', myIP);
});

这是我在 OpenShift 上使用 node.js 和 socket.io 的经验。
https://stackoverflow.com/a/29285652/2976093

关于javascript - 为什么我无法在运行 Openshift 托管的 Node.js + Websocket 的服务器上获取连接客户端的 ip 地址(使用 WebSocket-Node),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28683384/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com