,便沒有來得及剿滅司馬楚之。當然,司馬楚之的實力也不足以讓宋國擔心,所以才得以存在下來。這次北魏南征,司馬楚之主動聯絡北魏,被北魏任命為徵南將軍兼荊州刺史,與奚斤一起進攻河南。司馬楚之進攻雍上,奚斤進攻滑臺。
虎牢關的司州刺史毛德祖連忙派司馬(官名,不是姓)翟廣馳援滑臺,又派長社令王法政去守召陵,將軍劉憐守雍上,防禦司馬楚之。
司馬楚之攻打雍上的劉憐,因為劉憐堅守不能攻下;奚斤圍攻滑臺,也不能攻下;只有尚書滑稽乘虛攻下防守薄弱的倉垣,陳留太守嚴稜則主動向奚斤請降。但魏軍佔領倉垣和陳留並不能改變戰局形勢,晉軍和魏軍仍被宋軍所阻擋,不能南下。
於是拓跋嗣親自率軍五萬,向南進發,並向奚斤下了死命令,如果攻不下滑臺,就要治罪。奚斤遂親自衝到第一線和士兵一起攻城,魏軍士氣受到鼓舞,攻城力度明顯增加,很快攻破滑臺。守吏王景度棄城而逃,司馬(官名)陽瓚率兵與魏兵巷戰,最終被俘後遇難。奚斤乘勝擊敗迎面碰上來的翟廣援軍,直抵虎牢關下。毛德祖固城而守,魏軍屢次強攻,損兵折將,不能登城,再次被阻。
這時魏軍的黑矟將軍於慄出兵河陽,進攻洛陽的輔城金墉。毛德祖則派振威將軍竇晃沿黃河南岸佈防,堵截於慄。
魏軍又派將軍叔孫建等部隊向東迅速渡過黃河進攻青州和兗州。宋國的豫州刺史劉粹,則派屬將高道瑾據守項城,徐州刺史王仲德帶兵據守湖陸,阻截魏軍。
魏軍的娥清、期思侯、閭大肥等部進攻礎�x(今山東茌平西南古黃河南岸),兗州刺史徐琰稍一接觸便向南逃跑。於是魏軍的這部分很快攻破了泰山、高平、金鄉等郡。叔孫建便由此向東逼近青州,青州刺史竺夔據守東陽城,同時向建康求救。
宋國派南兗州刺史檀道濟會同冀州刺史王仲德,出師東援;廬陵王劉義真這時也派龍驤將軍沈叔狸,率軍支援。
這場戰爭一直持續到第二年,最終魏將於慄在奚斤部隊的配合下突破了竇晃的防線,大敗竇晃,直逼金墉城。據守金墉和洛陽的河南太守王涓之聽說魏軍來了,棄城而逃。魏軍不戰而得金墉、洛陽。於慄被拓跋嗣任命為豫州刺史,鎮守洛陽。這時,魏軍得以抽出所有兵力集中到虎牢關那裡猛攻,虎牢關越加吃緊,奚斤、公孫表等部日夜猛攻,魏軍的後繼部隊源源不斷。毛德祖拼命抵禦,並挖通六條地道,夜裡從地道中出來偷襲魏軍,將魏軍擊退。但魏軍被擊退並不亂陣腳,毛德祖又不敢追擊迫敵決戰,只能佔了便宜後迅速回城。所以魏軍很快又重新集結攻城。
毛德祖又用了一個反間計,假裝和公孫表通訊,卻故意讓奚斤看到。奚斤查獲書信後,立刻密報拓跋嗣,正巧太史令王亮和公孫表有矛盾,便借這個機會向拓跋嗣說了公孫表的許多壞話。拓跋嗣於是迅速派了欽差大臣,飛馳到公孫表的營中,把公孫表給勒死了。
公孫表本是一員勇將,他一死,毛德祖便減輕了許多壓力,虎牢關竟然因此又守了三四個月。
在山東方面,拓跋嗣命令叔孫建急攻東陽城,又任命刁雍為青州刺史,命令他率部協助叔孫建攻城。刁雍就是被劉裕殺掉的前豫州刺史刁逵的同族,刁逵被殺後,刁氏全族被殺。只有刁雍逃到後秦,後秦滅亡後又逃到魏國。
東陽守吏竺夔一共只有兩千來人,他先派人把所有的莊稼都收割了,然後守城不出。魏軍進入青州後,因為不能就地籌糧等待後勤補給,浪費了一些時間。濟南太守桓苗趁這段時間趕到東陽城,與竺夔合兵一處共同守城。
魏軍不惜代價地強攻,多次造成險情,並且有一次已經攻塌了一段城池,竺夔和桓苗在城缺口拼命搶堵,用屍體填埋缺口,總算擊退魏軍。這時魏軍中流行起瘟疫,有一大半士兵染病。叔孫建要退兵,刁雍極力要求繼續進攻。正在爭執時,宋軍的援軍檀道濟部到了,魏軍遂迅速撤退。
檀道濟是扔了輜重急行軍,到了東陽城時糧草已盡,士兵們也餓了一天了,所以也不能追擊魏軍,便留在東陽城修築城防。
魏軍在東部無法前進,而且碰到了宋軍主力,只好把進攻重點全部集中在西邊,集中了更多的兵力強攻虎牢關。拓跋嗣親自在軍中督戰。
虎牢關已經被圍七個多月,每天都在打仗,士兵已經死傷大半,在魏軍前仆後繼的強攻下,虎牢關在十多天後被攻破。但毛祖德已經事先在城內又修了三重城,魏軍本來以為成功了,卻見眼前又有一重城牆,只好又拼命往裡攻。攻了一重又一重,攻到第三重時,宋