http – 如何在OpenShift上检测WebSocket连接的远程/客户端IP地址

在OpenShift云中,通常的Apache代理将发送HTTP头x-client-ip和x-forwarded-for,我可以使用它来确定客户端IP.

但对于newer proxy, which is the only option for WebSocket users,这些是唯一发送的标头:

>连接
>升级
> sec-websocket-version
> sec-websocket-key
>起源
>主持人

这些头文件都不能帮助我检测远程地址和socket.remoteAddress的NodeJS属性是无用的,因为它将检测代理IP.

我可以使用任何解决方案?

最佳答案 继续我对node.js&的经验socket.io @ OpenShift.

我必须找到解决socket.handshake.address的方法,它不能按预期工作,所以这是我记录client.ip地址的实现…

当客户端连接时,服务器使用数据包“请求”client.ip.为0x00

当0x00数据包到达客户端时:

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

将包含client.ip的0x01数据包发送到服务器.

这将是服务器接收数据包0x01的示例:

socket.on('0x01', function(myIP){
    console.log('[+] Client @',myIP,':',socket.id);
  });

这对我来说非常完美,祝你好运.

点赞