为什么可以't我得到连接客户端's的ip地址在我的服务器上运行Node.js+Openshift托管的W

Why can't I get the connecting client's ip address on my server running Node.js + Websocket hosted by Openshift (Using WebSocket-Node)

本文关键字:服务器 运行 我的 js+Openshift 地址 Node 为什么 客户端 连接 ip      更新时间:2024-04-18

我使用的是openshift托管的Node.js 0.10+WebSocket Node(见此处),差不多就是这样,我没有使用express。除了无法获得任何连接客户端的ip地址外,服务器的行为完全符合预期,并出色地处理websocket请求和连接。

我已经做了功课,我知道openshift在反向代理后面,应该咨询x-forwarded-for标头以获得正确的ip。但是,WebSocketRequest.remoteAddress属性(如果存在,则从X-Forwarded-For标头获取其返回的ip)返回OPENSHIFT_NODEJS_ip的值(如rhc-env中所列),该值可能是服务器的ip。此外,我手动浏览了WebSocketRequest.httpRequest对象(它是对原始Node HTTP请求对象的引用),但在那里找不到任何x-forwarded-for标头的踪迹,(尽管我不会假装知道我在那里看到了什么。)

我的服务器还处理标准HTTP请求,当我检查request.headers['x-forwarded-for']时,DO会返回客户端ip,遗憾的是,这无助于通过websocket连接客户端的ip,因为它们不会触发标准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);
        }); 

以下是我使用node.js&socket.io@OpenShift
https://stackoverflow.com/a/29285652/2976093