如何获取Tornado Web套接字请求的客户端IP?

问题描述:

如何获取Tornado websocket请求的客户端IP?如何获取Tornado Web套接字请求的客户端IP?

我有一个传入连接()s的RequestHandler对象。我怎样才能找到刚刚连线的客户的IP?

def open(self): 
     ChatSocketHandler.clients.add(self) 
     i2c.write_byte_data(0x70, 0x00, 0xa5) 
     IR_on = True 
     print "Connection initiated" 
     ChatSocketHandler.send_updates("IR on") 

像正常RequestHandler情况下,WebsocketHandler实例具有一个HTTPServerRequest对象设置为Handlerrequest属性。您可以使用HTTPServerRequest.remote_ip属性来获取远程连接的IP。例如:在收到请求时

class EchoWebSocket(websocket.WebSocketHandler): 
    def initialize(self): 
     self._closed = False 

    def open(self): 
     print(type(self.request)) 
     print(self.request) 
     print(self.request.remote_ip) 

输出:

<class 'tornado.httputil.HTTPServerRequest'> 
HTTPServerRequest(protocol='http', host='localhost:8888', method='GET', uri='/ws', version='HTTP/1.1', remote_ip='::1', headers={'Connection': 'Upgrade', 'Upgrade': 'websocket', 'Accept-Encoding': 'gzip', 'Sec-Websocket-Version': '13', 'Host': 'localhost:8888', 'Sec-Websocket-Key': 'oAJpF4f4kp26b2KRjYmRGw=='}) 
::1 
+0

,当我从外部我的网络,即连接的3g它显示我的调制解调器的IP,而不是,我怎么能展现真实始发ip请 – Ossama 2014-10-03 20:41:24

+0

@Ossama在这种情况下,路由器的行为类似于反向代理 - 客户端连接到您的公网IP(这是您的路由器),路由器将请求转发到您的本地IP(“192.168.xx”例)。如果路由器在头文件中没有包含真实客户端IP,那么传递给'tornado',则可能无法获得真实的客户端IP。您可以尝试使用['xheaders'选项](http://www.tornadoweb.org/en/stable/httputil.html?highlight=remote_ip#tornado.httputil.HTTPServerRequest.remote_ip)并查看您的路由器是否包含'X -real-IP' /'X - 转发,For'。 – dano 2014-10-03 22:46:08

+0

我怎么能得到这个?我的头文件如下, – Ossama 2014-10-04 00:14:08