2013-01-04 54 views
2

有没有什么办法可以给我一个WebSocketConnection实例提取它所代表的客户端的IP /端口?我知道这个实现(即_WebSocketConnectionBase)有一个Socket作为私有变量,但我无法破解它。有什么解决方法吗?我可以从WebSocketConnection实例中提取客户端的IP /端口吗?

我需要这种功能的环境是这样的:我有一个处理Web套接字连接的服务器,并且我想将客户端的IP存储在他们的Web套接字旁边。我实例化我的服务器,如下所示:

var server = new HttpServer(); 
var wsHandler = new WebSocketHandler(); 

wsHandler.onOpen = this.subscribeUser; 
server.addRequestHandler((req) => req.path == "/ws", wsHandler.onRequest); 
... 
subscribeUser(WebSocketConnection user){...} 

是否有可能在此代码中的某处可能破解此功能?非常感谢您提前!

+1

如果'socket'变量是私有的,你有没有其他的方法来访问它(需要),我会考虑提交一个错误。但我不确定没有其他方法可以获取您想要的信息。 –

+0

是的,请做一个错误。这应该是可能的,而不诉诸黑客。 –

回答

1

您可以尝试制作WebSocketHandler的扩展实现并从此处获取请求。举个例子:

class betterWebSocket implements WebSocketHandler { 
    WebSocketHandler _wsHandler = new WebSocketHandler(); 

    void onRequest(HttpRequest request, HttpResponse response) { 
    print(request.connectionInfo.remoteHost); // Print the IP of the remote to the screen 
    _wsHandler.onRequest(request, response); 
    } 

    void set onOpen(callback(WebSocketConnection connection)) { 
    _wsHandler.onOpen = callback; 
    } 
} 

你可以使用这个类作为一个正常WebSocketHandler:

void main() { 
    HttpServer server = new HttpServer(); 
    betterWebSocket wsHandler = new betterWebSocket(); 

    server.addRequestHandler((req) => req.path == "/", wsHandler.onRequest); 

    wsHandler.onOpen = (WebSocketConnection conn) { 
    print("New connection"); 

    conn.onMessage = (message) { 
     print("message is $message"); 
    }; 

    conn.onClosed = (int status, String reason) { 
     print('closed with $status for $reason'); 
    }; 

    server.listen('127.0.0.1', 20024); 
}; 
相关问题