    async def get_ip(self) -> Union[IPv4Address, IPv6Address]:
        """
        get ip address of client
        :return:
        """
        xff = await self.get_x_forwarded_for()
        if xff: return xff[0]
        ip_addr = self._request.transport.get_extra_info('peername')[0]
        return ip_address(ip_addr)