Ver Fonte

handle IPv6 address in tproxy

Darien Raymond há 8 anos atrás
pai
commit
0a91893a26
1 ficheiros alterados com 5 adições e 1 exclusões
  1. 5 1
      transport/internet/udp/hub_linux.go

+ 5 - 1
transport/internet/udp/hub_linux.go

@@ -25,10 +25,14 @@ func RetrieveOriginalDest(oob []byte) v2net.Destination {
 		return v2net.Destination{}
 	}
 	for _, msg := range msgs {
-		if msg.Header.Level == syscall.SOL_IP && msg.Header.Type == syscall.IP_ORIGDSTADDR {
+		if msg.Header.Level == syscall.SOL_IP && msg.Header.Type == syscall.IP_RECVORIGDSTADDR {
 			ip := v2net.IPAddress(msg.Data[4:8])
 			port := v2net.PortFromBytes(msg.Data[2:4])
 			return v2net.UDPDestination(ip, port)
+		} else if msg.Header.Level == syscall.SOL_IPV6 && msg.Header.Type == syscall.IP_RECVORIGDSTADDR {
+			ip := v2net.IPAddress(msg.Data[8:24])
+			port := v2net.PortFromBytes(msg.Data[2:4])
+			return v2net.UDPDestination(ip, port)
 		}
 	}
 	return v2net.Destination{}