在Django-channels上获取IP地址 - 在接收处理程序上

时间:2017-05-26 17:10:04

标签: python django django-channels

我们在message.content["client"]处理程序中将Web套接字客户端的IP地址作为connect获取。但是这个代码在receive处理程序中失败了。有没有办法在receive处理程序中获取客户端的IP地址?

修改

在' dphane / ws_protocol.py',在课程WebSocketProtocol中,我在onconnect中看到,代码是

        self.request_info = {
            "path": self.unquote(self.path),
            "headers": self.clean_headers,
            "query_string": self._raw_query_string,  # Passed by HTTP protocol
            "client": self.client_addr,
            "server": self.server_addr,
            "reply_channel": self.reply_channel,
            "order": 0,
        }

        ...
        ...

        self.channel_layer.send("websocket.connect", self.request_info)

onmessage中,代码为

        if isBinary:
            self.channel_layer.send("websocket.receive", {
                "reply_channel": self.reply_channel,
                "path": self.unquote(self.path),
                "order": self.packets_received,
                "bytes": payload,
            })
        else:
            self.channel_layer.send("websocket.receive", {
                "reply_channel": self.reply_channel,
                "path": self.unquote(self.path),
                "order": self.packets_received,
                "text": payload.decode("utf8"),
            })

我们没有获得客户端IP,因为Dphane没有在message处理程序中提供该信息。

除了继承类WebSocketProtocol&压倒消息

2 个答案:

答案 0 :(得分:0)

您可以使用request.META [' REMOTE_ADDR']

进行修复

答案 1 :(得分:0)

不确定这是否仍然是一个问题,但你应该考虑获得 message.content [“client”]进入会话。 因此,当您收到消息时,您可以在会话中检索IP。