sing/protocol/http/addr.go

23 lines
479 B
Go

package http
import (
"net/http"
"strings"
M "github.com/sagernet/sing/common/metadata"
)
func SourceAddress(request *http.Request) M.Socksaddr {
address := M.ParseSocksaddr(request.RemoteAddr)
forwardFrom := request.Header.Get("X-Forwarded-For")
if forwardFrom != "" {
for _, from := range strings.Split(forwardFrom, ",") {
originAddr := M.ParseAddr(from)
if originAddr.IsValid() {
address.Addr = originAddr
break
}
}
}
return address.Unwrap()
}