zoukankan      html  css  js  c++  java
  • go 通过nginx代理后获取用户ip

    go 如果使用自己的服务器,可以直接使用 net/http 来获取

    func ip(w http.ResponseWriter, r *http.Request) {
        fmt.Println(r.RemoteAddr)
    }

    另外,在net包中也有 

    func (c *IPConn) RemoteAddr() Addr

    以上是获取用户的ip,是与用户直连的ip,如果走代理,会是代理的ip

    如果通过nginx代理,上边方法获得的是nginx的服务器的ip,所以这里要设置nginx代理

    proxy_set_header Remote_addr $remote_addr;

    nginx会 转发ip到go的服务器,在通过go获取header中的remote_adder 获取用户的ip

    func ip(w http.ResponseWriter, r *http.Request) {
        fmt.Println(r.Header.get("Remote_addr"))
    }

      nginx设置还可以设置X-Forward-For,这里没有测试,所以就没有贴出来,也是可以获取用户ip的,如果用户代理也是可以拿到真是ip的,通过header头获取虽然有可能被修改,但好像现在只有这几种方式,如果你有的方式,请回复出来,大家一起学习(x-forward-for的格式一般是:client_ip,proxy_ip,proxy_ip,...,所以,这样需要截取,如果用户没有走代理的话,这个会是空的)

      兼容go服务器的获取

    func ip(w http.ResponseWriter, r *http.Request) {
        ip: = r.Header.get("Remote_addr")
        if (ip=="") {
           ip = r.RemoteAddr
        }
        fmt.Println(ip)
    }
  • 相关阅读:
    集合(set)
    字典方法
    字典(dict)
    元组(tuple)
    列表方法
    xxxx(四):接受消息hook地址分析
    xxxx(三)“黑吃黑”: 破解别人外挂
    UDP内网穿透和打洞原理与代码实现
    VMP加壳(三):VMP壳爆破实战-破解某编辑类软件
    VMP加壳(二):VMP的虚拟化原理
  • 原文地址:https://www.cnblogs.com/dfsxh/p/10301496.html
Copyright © 2011-2022 走看看