Tras la derrota de la primera guerra, Aníbal sabía que la única forma de derrotar a Roma era atacando la base de su poder en Italia, aparentemente protegida por su dominio del mar. El general cartaginés dejó a su hermano
Asdrúbal en la península Ibérica, mientras él conducía un ejército compuesto de mercenarios africanos e hispanos, que cruzó los Pirineos, el Ródano y los Alpes en seis meses. Aunque sus fuerzas habían quedado reducidas a la mitad tras la terrible marcha, consiguió adelantarse a la reacción romana.

Venció en
Trebia (218) a un primer ejército mandado por los cónsules
P. Cornelio Escipión y
Tiberio Sempronio, tras lo cual muchos galos se unieron a las fuerzas cartaginesas.
Aníbal entró en
Etruria y aplastó de nuevo a las tropas romanas en
Trasimeno (217), dejando indefensa a Roma. Pero no se atrevió a cercar la capital con sus escasas fuerzas, y se dirigió al sur para tratar de conseguir aliados entre las ciudades recientemente sometidas por los romanos,
mientras que los romanos habían enviado a Hispania un ejército al mando de
Publio y Cneo Escipión, que desembarcó en
Emporion (218) y logró cortar las comunicaciones de Aníbal con sus bases en la Península. En 215 los romanos cruzaron el Ebro, derrotaron a Asdrúbal y conquistaron
Sagunto. El cartaginés tuvo que marchar a África para someter al rey númida
Sífax, lo que aprovechó
Publio Cornelio Escipión para avanzar hasta la Bética. Asdrúbal volvió a la Península, reforzado por los jinetes númidas de
Masinisa, y logró vencer y dar muerte a los
Escipiones en Cástulo e llorci (211), obligando a los romanos a replegarse al norte del Ebro. En otoño llegó a la Península Publio Cornelio Escipíón, hijo del cónsul del mismo nombre, que reorganizó las fuerzas romanas para evitar que Asdrúbal acudiera en ayuda de su hermano en Italia. Escipión consiguió tomar
Cartago Nova (209) y derrotar a Asdrúbal en
Bailén (208), pero éste reaccionó y marchó finalmente hacia Italia.
Aníbal se había trasladado a
Apulia tras la victoria de
Trasimeno, mientras entraba en negociaciones con
Filipo V de Macedonia y
Hierónimo de Siracusa para presentar un frente común contra Roma.

El general
Fabio Cunctator le seguía de cerca sin presentar batalla, hasta que fue obligado por el senado y el
cónsul Varrón. Aníbal le aplastó en
Cannas (216), lo que decidió a varias ciudades del sur a apoyarle. Trató entonces de conquistar
Tarento, cuyo puerto necesitaba para restablecer sus comunicaciones con el exterior, pero la debilidad de sus fuerzas, divididas para proteger a sus nuevos aliados, se lo impidió. Para cuando lo consiguió (213), Roma habla logrado recomponer sus tropas gracias a un extraordinario esfuerzo de su población, había contenido a Filipo en
Iliria y mantenía sitiada a Siracusa, defendida por los ingenios mecánicos del sabio
Arquímedes y apoyada por una flota cartaginesa.
En 211 los romanos se apoderaron de
Capua y Siracusa, acorralando a Aníbal en el extremo sur de la península Itálica. Asdrúbal, que por fin había llegado a Italia, fue derrotado y muerto en Metauro (207), al tiempo que Escipión vencía a los cartaaíneses en lupa y expulsaba a los púnicos de casi toda la península Ibérica.

Gádir, el último bastión, cayó en 206; el romano llevó entonces la guerra a Africa (204). Consiguió la alianza de Masinisa, venció al rebelde Sífax y a los cartagineses en
Útica (203) y amenazó a la propia capital. Cartago llamó en su ayuda a Aníbal, que se puso al frente de lo que quedaba del ejército cartaginés. La victoria de Escipión en
Zama (202), que le valió el apelativo honorífico de «el Africano», significó la completa derrota de Cartago, que tuvo que renunciar a Hispania y a las islas que conservaba, entregar sus elefantes y su flota de guerra y pagar 10.000
talentos. Además, se comprometió a no emprender nuevas campañas militares sin el consentimiento de Roma. En el año 195 el senado romano exigió la entrega de
Aníbal, convertido en magistrado supremo de Cartago, pero éste huyó a Oriente. Constantemente perseguido por los romanos, acabó suicidándose en
Bitinia (183)