Web Server Framework base on golang
To get client real ip behind tcp proxy, need modify the following source code:
type Conn struct {
// constant
conn net.Conn
isClient bool
...
// store the remote address behind proxy
ProxyRemoteAddr string
}
func (c *Conn) RawConn() net.Conn {
return c.conn
}
...type Server struct {
Addr string // TCP address to listen on, ":http" if empty
Handler Handler // handler to invoke, http.DefaultServeMux if nil
...
// get the remote address behind proxy
ProxyRemoteAddr func(net.Conn) string
}
...
func (c *conn) serve(ctx context.Context) {
c.remoteAddr = c.rwc.RemoteAddr().String()
remoteAddr := ""
if c.server.ProxyRemoteAddr != nil {
remoteAddr = c.server.ProxyRemoteAddr(c.rwc)
c.remoteAddr = remoteAddr;
}
...
if tlsConn, ok := c.rwc.(*tls.Conn); ok {
tlsConn.ProxyRemoteAddr = remoteAddr
...
}
}
...
func (h initALPNRequest) ServeHTTP(rw ResponseWriter, req *Request) {
...
if h.c.ProxyRemoteAddr != "" {
req.RemoteAddr = h.c.ProxyRemoteAddr
}
h.h.ServeHTTP(rw, req)
}- github.com/kardianos/service
- github.com/csby/gsecurity