diff --git a/cmd/hls/hls.go b/cmd/hls/hls.go index dc35c7d3..13fc337e 100644 --- a/cmd/hls/hls.go +++ b/cmd/hls/hls.go @@ -7,6 +7,7 @@ import ( "github.com/AlexxIT/go2rtc/pkg/core" "github.com/AlexxIT/go2rtc/pkg/mp4" "github.com/AlexxIT/go2rtc/pkg/mpegts" + "github.com/AlexxIT/go2rtc/pkg/tcp" "github.com/rs/zerolog/log" "net/http" "strconv" @@ -70,13 +71,13 @@ func handlerStream(w http.ResponseWriter, r *http.Request) { medias := mp4.ParseQuery(r.URL.Query()) if medias != nil { cons = &mp4.Consumer{ - RemoteAddr: r.RemoteAddr, + RemoteAddr: tcp.RemoteAddr(r), UserAgent: r.UserAgent(), Medias: medias, } } else { cons = &mpegts.Consumer{ - RemoteAddr: r.RemoteAddr, + RemoteAddr: tcp.RemoteAddr(r), UserAgent: r.UserAgent(), } } diff --git a/cmd/mjpeg/mjpeg.go b/cmd/mjpeg/mjpeg.go index ffb1caed..06d89023 100644 --- a/cmd/mjpeg/mjpeg.go +++ b/cmd/mjpeg/mjpeg.go @@ -5,6 +5,7 @@ import ( "github.com/AlexxIT/go2rtc/cmd/api" "github.com/AlexxIT/go2rtc/cmd/streams" "github.com/AlexxIT/go2rtc/pkg/mjpeg" + "github.com/AlexxIT/go2rtc/pkg/tcp" "github.com/rs/zerolog/log" "io" "net/http" @@ -29,7 +30,7 @@ func handlerKeyframe(w http.ResponseWriter, r *http.Request) { exit := make(chan []byte) cons := &mjpeg.Consumer{ - RemoteAddr: r.RemoteAddr, + RemoteAddr: tcp.RemoteAddr(r), UserAgent: r.UserAgent(), } cons.Listen(func(msg any) { @@ -81,7 +82,7 @@ func outputMjpeg(w http.ResponseWriter, r *http.Request) { flusher := w.(http.Flusher) cons := &mjpeg.Consumer{ - RemoteAddr: r.RemoteAddr, + RemoteAddr: tcp.RemoteAddr(r), UserAgent: r.UserAgent(), } cons.Listen(func(msg any) { @@ -146,7 +147,7 @@ func handlerWS(tr *api.Transport, _ *api.Message) error { } cons := &mjpeg.Consumer{ - RemoteAddr: tr.Request.RemoteAddr, + RemoteAddr: tcp.RemoteAddr(tr.Request), UserAgent: tr.Request.UserAgent(), } cons.Listen(func(msg any) { diff --git a/cmd/mp4/mp4.go b/cmd/mp4/mp4.go index c98ff9a6..4390f83d 100644 --- a/cmd/mp4/mp4.go +++ b/cmd/mp4/mp4.go @@ -6,6 +6,7 @@ import ( "github.com/AlexxIT/go2rtc/cmd/streams" "github.com/AlexxIT/go2rtc/pkg/core" "github.com/AlexxIT/go2rtc/pkg/mp4" + "github.com/AlexxIT/go2rtc/pkg/tcp" "github.com/rs/zerolog" "net/http" "strconv" @@ -103,7 +104,7 @@ func handlerMP4(w http.ResponseWriter, r *http.Request) { exit := make(chan error) cons := &mp4.Consumer{ - RemoteAddr: r.RemoteAddr, + RemoteAddr: tcp.RemoteAddr(r), UserAgent: r.UserAgent(), Medias: core.ParseQuery(r.URL.Query()), } diff --git a/cmd/mp4/ws.go b/cmd/mp4/ws.go index 35a94cb3..1ea4d235 100644 --- a/cmd/mp4/ws.go +++ b/cmd/mp4/ws.go @@ -6,6 +6,7 @@ import ( "github.com/AlexxIT/go2rtc/cmd/streams" "github.com/AlexxIT/go2rtc/pkg/core" "github.com/AlexxIT/go2rtc/pkg/mp4" + "github.com/AlexxIT/go2rtc/pkg/tcp" "strings" ) @@ -17,7 +18,7 @@ func handlerWSMSE(tr *api.Transport, msg *api.Message) error { } cons := &mp4.Consumer{ - RemoteAddr: tr.Request.RemoteAddr, + RemoteAddr: tcp.RemoteAddr(tr.Request), UserAgent: tr.Request.UserAgent(), } @@ -64,7 +65,7 @@ func handlerWSMP4(tr *api.Transport, msg *api.Message) error { } cons := &mp4.Segment{ - RemoteAddr: tr.Request.RemoteAddr, + RemoteAddr: tcp.RemoteAddr(tr.Request), UserAgent: tr.Request.UserAgent(), OnlyKeyframe: true, } diff --git a/pkg/tcp/helpers.go b/pkg/tcp/helpers.go new file mode 100644 index 00000000..9db42a89 --- /dev/null +++ b/pkg/tcp/helpers.go @@ -0,0 +1,12 @@ +package tcp + +import ( + "net/http" +) + +func RemoteAddr(r *http.Request) string { + if remote := r.Header.Get("X-Forwarded-For"); remote != "" { + return remote + ", " + r.RemoteAddr + } + return r.RemoteAddr +}