Bowling an impeccable line and length after their batsmen gave them a first innings total of 312, the Indian pacemen put the visitors in the driving seat for a series-clinching win in the series tied at 1-1.
Ishant struck the first blow bay dismissing Upul Tharanga (four) caught at second slip by Lokesh Rahul, who had earlier dropped the same batsman on zero in the first over of Sri Lanka's innings.
Tharanga, who replaced the retired Kumar Sangakkara in the side for the match, could consider himself unlucky with replays showing the delivery was perilously close to be called a no ball but the television umpire ruled Ishant's delivery legal.
Fellow opener Kaushal Silva (three) was late to take his bat away from a sharp and rising delivery from Umesh Yadav and got an inside edge crashing onto his stumps.
Dinesh Chandimal (23) launched a counter attack, hitting five fours in his 27-ball knock, but was given out lbw to Binny with replays indicating the ball was a bit high and could have gone over the stumps.
Ishant returned for his second spell to get Sri Lanka captain Angelo Mathews (one) edging behind on his first ball for debutant Indian wicketkeeper Naman Ojha to complete his first test dismissal.
Binny then had number three batsman Dimuth Karunaratne (11) caught by Rahul at second slip with the final delivery before the break to send half the Sri Lankan batting line-up back to the dressing room.
Earlier, India added 20 runs to their overnight score of 292-8 to complete a solid first innings.
Cheteshwar Pujara, forced to bat at the top due to injuries to regular openers, carried his bat through to remain unbeaten on 145 for the visitors.
Left-arm spinner Rangana Herath bowled out tail-enders Ishant and Yadav to finish with three wickets in the innings. Paceman Dhammika Prasad was the pick of the Sri Lankan bowlers with figures of 4-100.
Original source: Seamers put India in control