diff --git a/cmd/devp2p/internal/v5test/framework.go b/cmd/devp2p/internal/v5test/framework.go index fc3c73dd24..e8b7cb636b 100644 --- a/cmd/devp2p/internal/v5test/framework.go +++ b/cmd/devp2p/internal/v5test/framework.go @@ -229,10 +229,14 @@ func (tc *conn) read(c net.PacketConn) v5wire.Packet { if err := c.SetReadDeadline(time.Now().Add(waitTime)); err != nil { return &readError{err} } - n, _, err := c.ReadFrom(buf) + n, fromAddr, err := c.ReadFrom(buf) if err != nil { return &readError{err} } + // Verify the packet is from an expected remote address. + if fromAddr.String() != tc.remoteAddrFor(c).String() { + return readErrorf("packet from unexpected address %v", fromAddr) + } // Always use remoteAddr for codec session lookup, even if the actual sender // address differs (e.g. in multi-network setups where packets are routed // through a different interface).