소스 검색

UDS: Keep valid source addr (#4325)

Fixes https://github.com/XTLS/Xray-core/issues/4324
风扇滑翔翼 9 달 전
부모
커밋
3a7a78ff3a
1개의 변경된 파일13개의 추가작업 그리고 2개의 파일을 삭제
  1. 13 2
      app/proxyman/inbound/worker.go

+ 13 - 2
app/proxyman/inbound/worker.go

@@ -2,6 +2,7 @@ package inbound
 
 import (
 	"context"
+	"strings"
 	"sync"
 	"sync/atomic"
 	"time"
@@ -463,9 +464,19 @@ func (w *dsWorker) callback(conn stat.Connection) {
 			WriteCounter: w.downlinkCounter,
 		}
 	}
+	// For most of time, unix obviously have no source addr. But if we leave it empty, it will cause panic.
+	// So we use gateway as source for log.
+	// However, there are some special situations where a valid source address might be available.
+	// Such as the source address parsed from X-Forwarded-For in websocket.
+	// In that case, we keep it.
+	var source net.Destination
+	if !strings.Contains(conn.RemoteAddr().String(), "unix") {
+		source = net.DestinationFromAddr(conn.RemoteAddr())
+	} else {
+		source = net.UnixDestination(w.address)
+	}
 	ctx = session.ContextWithInbound(ctx, &session.Inbound{
-		// Unix have no source addr, so we use gateway as source for log.
-		Source:  net.UnixDestination(w.address),
+		Source:  source,
 		Gateway: net.UnixDestination(w.address),
 		Tag:     w.tag,
 		Conn:    conn,