fix: socks5 udp domain handling bug & add test case for it

This commit is contained in:
tobyxdd
2023-06-11 16:34:45 -07:00
parent fefabaf739
commit b27628607a
2 changed files with 31 additions and 8 deletions

View File

@@ -254,7 +254,12 @@ func (s *Server) udpServer(udpConn *net.UDPConn, hyUDP client.HyUDPConn) error {
if err != nil {
continue
}
addr = addr[1:] // Remove the leading length byte
if atyp == socks5.ATYPDomain {
// socks5.ParseAddress adds a leading byte for domains,
// but socks5.NewDatagram will add it again as it expects a raw domain.
// So we must remove it here.
addr = addr[1:]
}
d := socks5.NewDatagram(atyp, addr, port, bs)
_, _ = udpConn.WriteToUDP(d.Bytes(), clientAddr)
}