From 11c50c7558f130b9e38ba1328f20a61e2fada2f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=96=E7=95=8C?= Date: Wed, 12 Apr 2023 20:44:17 +0800 Subject: [PATCH] Fix processing domain address in packet --- common/dialer/resolve.go | 2 +- common/mux/client.go | 6 +++++- transport/hysteria/protocol.go | 7 ++++++- transport/trojan/protocol.go | 6 +++++- transport/vless/client.go | 6 +++++- transport/vless/service.go | 6 +++++- 6 files changed, 27 insertions(+), 6 deletions(-) diff --git a/common/dialer/resolve.go b/common/dialer/resolve.go index 66b86097..327d3610 100644 --- a/common/dialer/resolve.go +++ b/common/dialer/resolve.go @@ -73,7 +73,7 @@ func (d *ResolveDialer) ListenPacket(ctx context.Context, destination M.Socksadd if err != nil { return nil, err } - return bufio.NewNATPacketConn(bufio.NewPacketConn(conn), destination, M.SocksaddrFrom(destinationAddress, destination.Port)), nil + return bufio.NewNATPacketConn(bufio.NewPacketConn(conn), M.SocksaddrFrom(destinationAddress, destination.Port), destination), nil } func (d *ResolveDialer) Upstream() any { diff --git a/common/mux/client.go b/common/mux/client.go index c4b2a6f9..2f523f70 100644 --- a/common/mux/client.go +++ b/common/mux/client.go @@ -413,7 +413,11 @@ func (c *ClientPacketAddrConn) ReadFrom(p []byte) (n int, addr net.Addr, err err if err != nil { return } - addr = destination.UDPAddr() + if destination.IsFqdn() { + addr = destination + } else { + addr = destination.UDPAddr() + } var length uint16 err = binary.Read(c.ExtendedConn, binary.BigEndian, &length) if err != nil { diff --git a/transport/hysteria/protocol.go b/transport/hysteria/protocol.go index beed65a3..179dad34 100644 --- a/transport/hysteria/protocol.go +++ b/transport/hysteria/protocol.go @@ -498,7 +498,12 @@ func (c *PacketConn) ReadFrom(p []byte) (n int, addr net.Addr, err error) { return } n = copy(p, msg.Data) - addr = M.ParseSocksaddrHostPort(msg.Host, msg.Port).UDPAddr() + destination := M.ParseSocksaddrHostPort(msg.Host, msg.Port) + if destination.IsFqdn() { + addr = destination + } else { + addr = destination.UDPAddr() + } return } diff --git a/transport/trojan/protocol.go b/transport/trojan/protocol.go index ad9174d1..12195f58 100644 --- a/transport/trojan/protocol.go +++ b/transport/trojan/protocol.go @@ -131,7 +131,11 @@ func (c *ClientPacketConn) ReadFrom(p []byte) (n int, addr net.Addr, err error) return } n = buffer.Len() - addr = destination.UDPAddr() + if destination.IsFqdn() { + addr = destination + } else { + addr = destination.UDPAddr() + } return } diff --git a/transport/vless/client.go b/transport/vless/client.go index 0c3bec34..1a5885b7 100644 --- a/transport/vless/client.go +++ b/transport/vless/client.go @@ -196,7 +196,11 @@ func (c *PacketConn) ReadFrom(p []byte) (n int, addr net.Addr, err error) { if err != nil { return } - addr = c.destination.UDPAddr() + if c.destination.IsFqdn() { + addr = c.destination + } else { + addr = c.destination.UDPAddr() + } return } diff --git a/transport/vless/service.go b/transport/vless/service.go index 7a6cf97d..878feeec 100644 --- a/transport/vless/service.go +++ b/transport/vless/service.go @@ -146,7 +146,11 @@ func (c *serverPacketConn) ReadFrom(p []byte) (n int, addr net.Addr, err error) if err != nil { return } - addr = c.destination.UDPAddr() + if c.destination.IsFqdn() { + addr = c.destination + } else { + addr = c.destination.UDPAddr() + } return }