You can attack the problem in at least 2 ways.

The first is to fill the pores and apply a dye stain to color the surface. Multiple coats will likely be required to get the desired shade. No sanding allowed at this stage. Then apply the final finish. Oil, polyurethane varnish, lacquer or what you like. The first coat should be sprayed so as to not mar the stain coating by rubbing.
Dye stains come in two types, water based and spirit ( alcohol) based. Either type will work. A water based stain might be best assuming you raised the grain prior to the final sanding.

The other way is to fill the pores by whatever method you chose and finish sand the surface to make ready for finish. Then apply the finish tinted with a spirit based dye stain of the desired color. Each coat of finish intensifies the color because more stain will be on the surface. Spraying is the best method to get uniform color. This is the method Winchester used in the old days to darken sap wood to match heart wood on their production walnut stocks. They used lacquer because is was easy to spray and dried fast, helping maintain production rates.

Dye stains are better than the traditional oil based ground mineral stains found in hardware stores because they do not emphasize scratches and unfilled pores as much. Plus dye stains can be lightened by wiping with a rag wetted with the dye solvent.

Pores can be filled by using a regular paste type filler used by many wood workers, tinted if desired. This one is good: https://www.woodcraft.com/products/behlen-pore-o-pac-paste-wood-grain-filler-natural-quart . However, the filler solid is ground silica(sand) and is hell on steel checkering tools. You can use a liquid resin like spar varnish, but unless you allow it to dry for a few weeks, the pores will reappear when it finally dries out completely. Epoxy does a good job since it cures fast and doesn't shrink later. I prefer sanding-in, using a polyurethane finish like Minwax Wipe-on-Poly: http://www.woodworking.org/WC/GArchive99/1_20waltcunfin.html

RAN