码迷,mamicode.com
首页 > 其他好文 > 详细

tornado获得客户端设备信息和ip地址

时间:2014-11-26 16:16:07      阅读:243      评论:0      收藏:0      [点我收藏+]

标签:blog   http   io   ar   os   使用   sp   for   on   

最初看到的关于如何获取客户端ip地址的博客是在Tornado获取客户端IP

然后 查看tornado源码,发现可以直接用self.request.remote_ip获得客户端地址:

 

    def __str__(self):
        if self.address_family in (socket.AF_INET, socket.AF_INET6):
            return self.remote_ip
        elif isinstance(self.address, bytes):
            # Python 3 with the -bb option warns about str(bytes),
            # so convert it explicitly.
            # Unix socket addresses are str on mac but bytes on linux.
            return native_str(self.address)
        else:
            return str(self.address)

    def _apply_xheaders(self, headers):
        """Rewrite the ``remote_ip`` and ``protocol`` fields."""
        # Squid uses X-Forwarded-For, others use X-Real-Ip
        ip = headers.get("X-Forwarded-For", self.remote_ip)
        ip = ip.split(‘,‘)[-1].strip()
        ip = headers.get("X-Real-Ip", ip)
        if netutil.is_valid_ip(ip):
            self.remote_ip = ip
        # AWS uses X-Forwarded-Proto
        proto_header = headers.get(
            "X-Scheme", headers.get("X-Forwarded-Proto",
                                    self.protocol))
        if proto_header in ("http", "https"):
            self.protocol = proto_header

    def _unapply_xheaders(self):
        """Undo changes from `_apply_xheaders`.

        Xheaders are per-request so they should not leak to the next
        request on the same connection.
        """
        self.remote_ip = self._orig_remote_ip
        self.protocol = self._orig_protocol

于是觉得可以这样子做:

‘‘‘ Copyright (c) HuangJunJie@SYSU(SNO13331087). All Rights Reserved. ‘‘‘
‘‘‘ get_user-agent_and_ip.py: catch the headers and ip of the client ‘‘‘
import tornado.httpserver
import tornado.ioloop
import tornado.web
import tornado.options
import os.path

from tornado.options import define, options
define("port", default=8888, help="run on the given port", type=int)


class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.write(self.request.headers[‘user-agent‘] +            "\nyour current ip is: "+self.request.remote_ip)


if __name__ == "__main__":
    application = tornado.web.Application([(r"/", MainHandler)], debug = True)
    http_server = tornado.httpserver.HTTPServer(application, xheaders=True)
    http_server.listen(options.port)
    tornado.ioloop.IOLoop.instance().start()

 在本地的浏览器访问和使用手机该笔记本发射的wifi访问得到了如下结果:

bubuko.com,布布扣

 

tornado获得客户端设备信息和ip地址

标签:blog   http   io   ar   os   使用   sp   for   on   

原文地址:http://www.cnblogs.com/DingCao/p/tornado_get_user.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!