From 0df2f79ecec55f3a2ba6f3af5a799885eb1094c7 Mon Sep 17 00:00:00 2001 From: wwqgtxx Date: Sun, 9 Nov 2025 11:24:05 +0800 Subject: [PATCH] fix: missing metadata in mieru inbound --- listener/mieru/server.go | 41 +++++++++++++++++----------------------- 1 file changed, 17 insertions(+), 24 deletions(-) diff --git a/listener/mieru/server.go b/listener/mieru/server.go index 9b1e2e6f..3428c40a 100644 --- a/listener/mieru/server.go +++ b/listener/mieru/server.go @@ -31,12 +31,23 @@ func Handle(conn net.Conn, tunnel C.Tunnel, request *mierumodel.Request, additio } // Handle the connection with tunnel. - metadata := mieruRequestToMetadata(request) - inbound.ApplyAdditions(&metadata, additions...) - switch metadata.NetWork { - case C.TCP: - tunnel.HandleTCPConn(conn, &metadata) - case C.UDP: + switch request.Command { + case mieruconstant.Socks5ConnectCmd: // TCP + metadata := &C.Metadata{ + NetWork: C.TCP, + Type: C.MIERU, + DstPort: uint16(request.DstAddr.Port), + } + if request.DstAddr.FQDN != "" { + metadata.Host = request.DstAddr.FQDN + } else if request.DstAddr.IP != nil { + metadata.DstIP, _ = netip.AddrFromSlice(request.DstAddr.IP) + metadata.DstIP = metadata.DstIP.Unmap() + } + inbound.ApplyAdditions(metadata, inbound.WithSrcAddr(conn.RemoteAddr()), inbound.WithInAddr(conn.LocalAddr())) + inbound.ApplyAdditions(metadata, additions...) + tunnel.HandleTCPConn(conn, metadata) + case mieruconstant.Socks5UDPAssociateCmd: // UDP pc := mierucommon.NewPacketOverStreamTunnel(conn) ep := N.NewEnhancePacketConn(pc) for { @@ -67,24 +78,6 @@ func Handle(conn net.Conn, tunnel C.Tunnel, request *mierumodel.Request, additio } } -func mieruRequestToMetadata(request *mierumodel.Request) C.Metadata { - m := C.Metadata{ - DstPort: uint16(request.DstAddr.Port), - } - switch request.Command { - case mieruconstant.Socks5ConnectCmd: - m.NetWork = C.TCP - case mieruconstant.Socks5UDPAssociateCmd: - m.NetWork = C.UDP - } - if request.DstAddr.FQDN != "" { - m.Host = request.DstAddr.FQDN - } else if request.DstAddr.IP != nil { - m.DstIP, _ = netip.AddrFromSlice(request.DstAddr.IP) - } - return m -} - type packet struct { pc net.PacketConn addr net.Addr // source (i.e. remote) IP & Port of the packet