公元前221年,迦太基為了奪回失地,任命25歲的漢尼拔為主帥,又開始了第二次布匿戰爭。漢尼拔出身於一個軍事貴族家庭,自幼隨父從軍,受過良好的軍事訓練和外交才能的培養,懂得幾種語言,能發動不同國籍的人為他作戰,並無條件地服從他。平時,他生活簡樸,極能吃苦,常常披著斗篷睡在放哨戰士中間,和士兵同甘共苦,深受士兵的愛戴。
公元前218年4月,漢尼拔率領9萬名步兵,1.2萬名騎兵和37隻戰象,越過了庇里牛斯山脈,又巧妙渡過羅尼河,開始了對義大利的遠征。漢尼拔率軍用了33天時間,克服了許多難以想像的困難,越過了歐洲有名的阿爾卑斯山麓,到達義大利北部的波河平原。漢尼拔的突然出現,使羅馬人大為驚慌,不得不放棄侵略非洲和西班牙的計劃,集中兵力保衛義大利本土。漢尼拔率領部隊花了4天3夜時間,涉過齊胸的污水和沼澤地,繞過羅馬軍的設防陣地,踏上了通往羅馬的大道。羅馬執政官弗拉米紐斯率軍尾追,不想落入了漢尼拔選好的戰場,當弗拉米紐斯率大隊人馬進入山谷時,漢尼拔立即發出進攻的信號,迦太基人前後夾擊,經過3小時廝殺,弗拉米紐斯全軍覆沒。羅馬元老院一面下令加固羅馬城防,同時任命經驗豐富的費邊率領4個軍團的兵力尾追漢尼拔軍隊,卻不與他們正面交戰。公元前217年底,瓦羅接任費邊執政官,其好大喜功,主張速戰速決。他的意見由於元老貴族的支持占了上風,雙方於公元前216年8月在奧費達斯河岸的坎尼地區展開了一場大戰。漢尼拔事先了解到當地每天午後刮東南風,於是指揮部隊緊急轉移,處於上風方向,並把部隊布成一個新月形陣勢,從側面把羅馬軍捲入口袋之中,重重包圍起來,最後全殲羅馬軍隊。這一戰,羅馬人損失極大,據說有7萬人被殺,瓦羅和370名騎兵逃出重圍,得以生還。這就是著名的坎尼之戰,它是西方軍事史上第一個合圍之戰,顯示了漢尼拔的卓越軍事才能。
公元前205年,羅馬33歲的年輕將領西庇阿率軍渡海到北非迦太基本土,迦太基急忙召漢尼拔回軍救援。公元前202年秋,雙方在扎瑪城附近進行最後的決戰。漢尼拔仍按常規列隊和戰法,西庇阿則不循常規,他把一、二、三線各部隊重疊配置,中間留出空道,以便讓戰象通過。交戰開始以後,當漢尼拔軍的戰象衝到西庇阿軍前沿時,西庇阿的一線部隊突然鼓角齊鳴,喊聲大作,漢尼拔軍的戰象受到驚嚇,有的停滯不前,有的轉身向自己的戰陣衝去,還有的受羅馬軍的投槍擊傷後逃跑。西庇阿抓住這一有利時機,命令騎兵迂迴包抄,同時將3線兵力集中起來,向漢尼拔軍正面猛攻,一鼓作氣,終於取得了勝利。漢尼拔軍戰死約2萬人,漢尼拔落荒而逃。這是漢尼拔第一次也是最後一次吃了敗仗。迦太基被迫求和,接受了十分苛刻的條件,失去一切海外屬土,賠款1萬塔蘭特,戰艦除留10艘外全被鑿毀。從此,迦太基的海上霸主地位徹底破產,羅馬成了西地中海的霸主。
半個世紀以後,迦太基在軍事上雖無力再與羅馬競爭,但其商業發展迅速,物質財富迅速增加,引起了羅馬的妒忌。羅馬惟恐迦太基復興,公元前149年,羅馬進犯迦太基,第三次布匿戰爭爆發。羅馬派執政官孟尼留斯率8萬步兵、4000騎兵、600艘戰艦,從西西里渡海直達迦太基的重鎮烏提卡。
對這突如其來的侵略,迦太基措手不及,只得向羅馬求和。羅馬提出,要迦太基交出全部武器和300名兒童作人質。當迦太基滿足羅馬這一條件後,羅馬無理要求迦太基毀掉城市,移居離海15公里以外的內地。迦太基人民憤怒已極,他們鑄造武器,加固城牆,充實糧庫,婦女們剪掉自己的頭髮,搓成繩子,供綁紮槍炮之用。公元前149‐前147年,羅馬在軍事上接連失利,直到前14