Hannibal dowództwo objął w 221 p.n.e., po śmierci Hazdrubala, który zginął w zamachu. Poszerzał kartagińskie posiadłości w Hiszpanii. Zajął m.in. sprzymierzone z Rzymem miasto Sagunto 219 p.n.e. W ten sposób rozpoczęła się druga wojna punicka. Hannibal wyruszył z Hiszpanii z 60-tysięczną armią przez Pireneje, południową Galię, Rodan i Alpy Zachodnie do Galii Przedalpejskiej i Italii. Po przekroczeniu Alp, w listopadzie 218 p.n.e. pokonał w bitwie nad rzeką Ticinius rzymskie oddziały złożone z welitów i ekwitów, dowodzone przez konsula Korneliusza Scypiona, który w walce odniósł ciężkie obrażenia, a przed śmiercią uchronił go jego syn Publiusz. Następnie Hannibal zwyciężył armię drugiego konsula Semproniusza nad rzeką Trebią. Ostra zima w północnej Italii spowodowała śmierć jego słoni. Zadał jednak po niej armii rzymskiej wiele klęsk, m.in. nad jeziorem Trazymeńskim i pod Kannami 2 sierpnia 216 p.n.e. Po tej ostatniej porażce wojska rzymskie nie podejmowały już otwartej bitwy. Przez kolejnych 10 lat Hannibal walczył w Italii. Ze względu na szczupłość swoich sił nie zajął on Rzymu. Celem jego działań było odwrócenie od Rzymu jego dotychczasowych sprzymierzeńców. Ostatecznie tylko kilka miast w Italii, takich jak Kapua w Kampanii zdecydowało się poprzeć Kartagińczyka. W 204 p.n.e. Scypion Afrykański wylądował w Kartaginie, zmuszając Hannibala do wycofania się z Italii i w bitwie pod Zamą w 202 p.n.e. pokonał jego wojska. Kartagina straciła wszystkie swoje posiadłości poza Afryką i musiała zapłacić kontrybucję oraz podporządkować swoją politykę zagraniczną Rzymowi.