Ганнибал с 206 по 203 год до н. э., когда он окончательно покинул Италию, удерживался в Бруттии как в клетке римскими армиями и не мог принимать участие в решающих боевых операциях. В 205 году до н. э. Сципион, избранный консулом, начал приготовления на Сицилии для вторжения в Африку. Город Локры перешел римлянам, но одна из двух крепостей по-прежнему оставалась в руках карфагенян. Борьба привела туда и Ганнибала, и Сципиона, но Сципион первым прибыл в город. Ганнибал подошел к городу, но, когда из ворот крепости неожиданно вырвались римляне, отступил. Ганнибал, безусловно, знал, что в численном отношении превосходит Сципиона, однако не стал атаковать. Если бы он ввязался в бой и убил или взял в плен Сципиона, то вторжение в Африку, не нашедшее особой поддержки в римском сенате, возможно, было бы отложено или совсем отменено.[539]
В 204 году до н. э. Ганнибал одержал победу над римлянами в местном бою только для того, чтобы в следующем году потерпеть поражение от тех же войск под командованием Публия Лициния Красса.[540] Летом того же года в Бруттии римляне штурмом взяли Клампетию. Консентия, Пандосия и несколько небольших городков сдались римлянам без борьбы.[541] К тому времени, когда Ганнибал был отозван в Африку, его армия уже не была той силой, с которой требовалось считаться.За смертью Гасдрубала и разгромом его армии в битве при Метавре в 207 году до н. э. последовала блестящая победа Сципиона в битве при Илипе весной 206 года до н. э., когда была уничтожена последняя главная карфагенская сила в Испании; было убито 60 тысяч карфагенян, а 6000 взято в плен.[542]
Большую часть лета Сципион занимался очисткой территории и наказанием племен, предавших Рим после смерти братьев Сципионов, а затем вернулся в Рим, где был избран консулом на 205 год до н. э. Сенат утвердил Бруттий и Сицилию консульскими провинциями. Лициний Красс отправился в Бруттий удерживать Ганнибала «в клетке», а Сципион получил назначение на Сицилию, где собрал необходимые силы для вторжения в Африку.Магон, брат Ганнибала и последний карфагенский командующий в Испании, собрал армию на острове Менорка и летом 205 года до н. э. отплыл в Лигурию с армией из 12 тысяч пеших и 2000 конных воинов в сопровождении 30 боевых кораблей.[543]
Он захватил Геную и начал набирать в армию лигурийские племена. Такой поворот событий создал угрозу на севере, и римляне укрепили легионы в Цизальпинской Галлии, чтобы воспрепятствовать наступлению Магона на юг. На следующий год Магон получил подкрепление из Карфагена: 6000 пеших воинов, 800 всадников, 7 слонов и 25 боевых кораблей.[544] Шесть римских легионов на два года задержали наступление Магона, но в 203 году до н. э. он решил рискнуть, вступив в бой, но потерпел поражение и потерял 5000 человек. Сам Магон был ранен; «он упал с пробитым бедром, и его, истекающего кровью, вынесли из битвы».[545] Он умер спустя несколько недель на борту корабля, направлявшегося в Карфаген.Весной 204 года до н. э. армия Сципиона, 31 тысяча пеших и 1200 конных воинов, погрузилась на 400 грузовых кораблей и в сопровождении 40 боевых кораблей отплыла с Сицилии и высадилась на западном побережье Африки в 16 милях к северо-востоку от Утики.[546]
На протяжении следующих двух лет Сципион провел множество сражений против карфагенян, в том числе у башни Агафокла (204 год до н. э.), на Великих равнинах (203 год до н. э.), а в 203 году до н. э. устроил поджог зимнего лагеря карфагенян, когда, по словам Ливия, «перебито было и погибло в огне около сорока тысяч человек, пленено больше пяти тысяч, в том числе много знатных карфагенян, и одиннадцать сенаторов».[547] Не менее важен был захват Сифакса, нумидийского царя и бывшего союзника римлян, чья мощная конница была важной составляющей боеспособности карфагенян. Столь же важен был союз Сципиона с Масиниссой, соперником нумидийского короля, который обеспечивал Сципиона всадниками. Поражение карфагенской армии на Великих равнинах и захват Сифакса заставили карфагенский сенат отозвать Магона (он умер в пути) и Ганнибала из Италии. Кроме того, сенат отправил в лагерь Сципиона посольство с просьбой о мире.Сципион предложил следующие условия: возвратить пленных, перебежчиков и рабов; вывести карфагенские войска из Италии и Галлии, отказаться от Испании, удалиться со всех островов между Италией и Африкой; выдать все военные корабли, кроме двадцати; заплатить контрибуцию в размере 5000 талантов. Эти условия были направлены не на разрушение Карфагена, а низведение его до уровня обычного государства, не имеющего возможности вести войну вне Африки. Сенат принял эти условия и подписал перемирие со Сципионом. Другое посольство отправилось в Рим, чтобы римский сенат утвердил эти условия. Впервые за шестнадцать лет Рим и Карфаген устроили передышку от войны.