diff --git a/app/proxyman/inbound/worker.go b/app/proxyman/inbound/worker.go index e5e3eeb1..42b5c3e9 100644 --- a/app/proxyman/inbound/worker.go +++ b/app/proxyman/inbound/worker.go @@ -77,25 +77,25 @@ func (w *tcpWorker) callback(conn stat.Connection) { case internet.SocketConfig_TProxy: dest = net.DestinationFromAddr(conn.LocalAddr()) } - // Check if try to connect to this inbound itself (can cause loopback) - var isLoopBack bool - if w.address == net.AnyIP || w.address == net.AnyIPv6 { - if dest.Port.Value() == w.port.Value() && IsLocal(dest.Address.IP()) { - isLoopBack = true - } - } else { - if w.hub.Addr().String() == dest.NetAddr() { - isLoopBack = true - } - } - if isLoopBack { - cancel() - conn.Close() - errors.LogError(ctx, errors.New("loopback connection detected")) - return - } if dest.IsValid() { + // Check if try to connect to this inbound itself (can cause loopback) + var isLoopBack bool + if w.address == net.AnyIP || w.address == net.AnyIPv6 { + if dest.Port.Value() == w.port.Value() && IsLocal(dest.Address.IP()) { + isLoopBack = true + } + } else { + if w.hub.Addr().String() == dest.NetAddr() { + isLoopBack = true + } + } + if isLoopBack { + cancel() + conn.Close() + errors.LogError(ctx, errors.New("loopback connection detected")) + return + } outbounds[0].Target = dest } }