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

时间:2015-02-23 21:03:11

标签: javascript node.js websocket openshift

我使用的是由openshift托管的Node.js 0.10 + WebSocket-Node(Seen here),这就是它,我不使用express。除了无法获得任何连接客户端的IP地址之外,服务器在其他方面的行为完全符合预期并且处理websocket请求和连接非常好。

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

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

我必须在这里遗漏一些东西,并且非常感谢任何新的调查路线或任何人都能提供的狡猾的解决方法。

1 个答案:

答案 0 :(得分:0)

您可以在套接字连接时探测每个客户端的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);
        }); 

继承我对node.js&amp ;;的经验socket.io @ OpenShift。
https://stackoverflow.com/a/29285652/2976093