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

时间:2015-02-24 03:59:13

标签: http websocket openshift

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

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

  • connection
  • upgrade
  • sec-websocket-version
  • sec-websocket-key
  • origin
  • host

这些标头都不能帮我检测远程地址,socket.remoteAddress的NodeJS属性没用,因为它会检测代理IP。

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

1 个答案:

答案 0 :(得分:2)

继承了 node.js & socket.io @ OpenShift。

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

客户端连接时,服务器'请求'为client.ip发送一个数据包。的 0×00

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);
  });

这对我来说非常合适,祝你好好实施。