W tym czasie Kartagina, chcąc zrównoważyć straty poniesione na rzecz Rzymu, rozpoczęła podbój Półwyspu Iberyjskiego. Rzymianie zdecydowali jednak nie dopuścić do odbudowy jej potęgi i doprowadzili do wybuchu II wojny punickiej (218–201). Ku ich zaskoczeniu kartagiński dowódca w Iberii, Hannibal, zdecydował się na przemarsz przez Alpy i atak na Italię od strony lądu. W latach 218–216 zadał on Rzymianom trzy ciężkie klęski: pod Trebią, nad Jeziorem Trazymeńskim oraz pod Kannami, i na jego stronę przeszło wiele plemion i miast południowej Italii, będących dotychczas sprzymierzeńcami Rzymu. Inne jednak pozostały mu wierne i starając się odtąd unikać otwartej bitwy z Hannibalem Rzymianie, wykorzystując swoje nadal ogromne rezerwy, zaczęli prowadzić z nim wojnę na wyczerpanie. Jednocześnie przez cały czas prowadzili wojnę w Iberii, dążąc do zajęcia tamtejszych posiadłości Kartaginy oraz odcinając Hannibala od zaopatrzenia i posiłków. Jego jedyną szansą było przybycie nowej armii z Iberii, jednak kiedy jego brat Hazdrubal w 207 przeprawił się przez Alpy został rozbity przez rzymskie wojska nad rzeką Metaurus. Do 206 Rzymianie zajęli Iberię i niedługo potem przenieśli walkę do Afryki, gdzie w 202 najwybitniejszy rzymski wódz tej wojny, Cornelius Scipio, pokonał Hannibala pod Zamą. Po przegranej wojnie Kartagina faktycznie przestała być niezależnym państwem, gdyż traktat pokojowy z 201 obok ogromnej kontrybucji przewidywał utratę jej wszystkich posiadłości poza Afryką, wydanie floty i zakaz prowadzenia wojen bez zgody Rzymu. Niedługo potem jak w 152 Kartagina spłaciła kontrybucję Rzymianie wszczęli przeciwko niej kolejną wojnę (149–146) i ostatecznie zniszczyli miasto.