mirror of
https://github.com/XTLS/Xray-core.git
synced 2024-11-04 12:09:19 +02:00
Improve the response to UDP Associate in Socks5
This commit is contained in:
parent
7427a55ef1
commit
700966508f
|
@ -39,10 +39,10 @@ var addrParser = protocol.NewAddressParser(
|
|||
)
|
||||
|
||||
type ServerSession struct {
|
||||
config *ServerConfig
|
||||
address net.Address
|
||||
port net.Port
|
||||
clientAddress net.Address
|
||||
config *ServerConfig
|
||||
address net.Address
|
||||
port net.Port
|
||||
localAddress net.Address
|
||||
}
|
||||
|
||||
func (s *ServerSession) handshake4(cmd byte, reader io.Reader, writer io.Writer) (*protocol.RequestHeader, error) {
|
||||
|
@ -192,14 +192,11 @@ func (s *ServerSession) handshake5(nMethod byte, reader io.Reader, writer io.Wri
|
|||
//nolint:gocritic // Use if else chain for clarity
|
||||
if request.Command == protocol.RequestCommandUDP {
|
||||
if s.config.Address != nil {
|
||||
// Use configured IP as remote address in the response to UdpAssociate
|
||||
// Use configured IP as remote address in the response to UDP Associate
|
||||
responseAddress = s.config.Address.AsAddress()
|
||||
} else if s.clientAddress == net.LocalHostIP || s.clientAddress == net.LocalHostIPv6 {
|
||||
// For localhost clients use loopback IP
|
||||
responseAddress = s.clientAddress
|
||||
} else {
|
||||
// For non-localhost clients use inbound listening address
|
||||
responseAddress = s.address
|
||||
// Use conn.LocalAddr() IP as remote address in the response by default
|
||||
responseAddress = s.localAddress
|
||||
}
|
||||
}
|
||||
if err := writeSocks5Response(writer, statusSuccess, responseAddress, responsePort); err != nil {
|
||||
|
|
|
@ -89,10 +89,10 @@ func (s *Server) processTCP(ctx context.Context, conn internet.Connection, dispa
|
|||
}
|
||||
|
||||
svrSession := &ServerSession{
|
||||
config: s.config,
|
||||
address: inbound.Gateway.Address,
|
||||
port: inbound.Gateway.Port,
|
||||
clientAddress: inbound.Source.Address,
|
||||
config: s.config,
|
||||
address: inbound.Gateway.Address,
|
||||
port: inbound.Gateway.Port,
|
||||
localAddress: net.IPAddress(conn.LocalAddr().(*net.TCPAddr).IP),
|
||||
}
|
||||
|
||||
reader := &buf.BufferedReader{Reader: buf.NewReader(conn)}
|
||||
|
|
Loading…
Reference in New Issue