率领5000人在土城子设下埋伏,准备伏击来犯的日军。18日,日军骑兵50人、步兵200人进入埋伏后被清军击毙11人,伤37。清军虽获小胜,但是也暴露了伏兵,未能达成阻击日军大部的心愿。20日,徐邦道率领5000人到石嘴子迎击来犯的日军,双方进行激烈交火,清军因寡不敌众而撤退。徐邦道等人的计划失败,未能阻止日军进犯。也许他们不如龚照玙等人精明,看不清必败无疑、大厦将倾的形势,但他们是民族的脊梁,正是因为像他们一样的无数人的支撑,我们的民族才能生存在这个世界上。
21日凌晨,第二军团向旅顺口发起总攻。
旅顺口的陆路炮台群以椅子山炮台为重中之重,其上的大口径火炮射程远、威力大,而且该炮台高度最高,可以俯瞰其它炮台,日军占据它以后只要调转炮口就轰击其它炮台的清军。为进攻这个炮台,日军组织了1500人的敢死队,做好了付出惨重代价的思想准备。6时50分,第一师团集中40门火炮瞄准椅子山炮台猛轰。清军椅子山炮台、松树山炮台、黄金山炮台立刻还击,霎时间炮声震天,似山崩地裂一般,双方都拼命向对方倾泻炮弹。虽然清军的火炮先进,但是因为炮台群散落几十里,不能把所有炮火集中攻击一处,在数量上处于劣势,而且日军炮兵的射击技术更胜一筹,几乎弹无虚发,所以很快日军压制住了清军的炮火,敢死队一拥而上抢占了椅子山炮台。
见椅子山炮台陷落,案子山炮台、望山炮台、松树山炮台的清军立刻失去了抵抗的勇气,没等日军发起冲锋便向后溃逃。紧接着,日军第十二混成旅团向二龙山炮台发起攻击。由于缺少炮火支援,日军士兵只能冒着清军猛烈的炮火冲锋。日军连续两次冲锋均被击退,但是日军士兵像打了鸡血一样亢奋,随即发动第三次冲锋,他们跨过同伴的尸体冲到距离炮台300米的地带,这时清军引爆了炮台前的地雷,虽然密集的地雷爆炸足以造成地动山摇,但是却没有一名日军伤亡——清军士兵没掌握好引爆的时机。二龙山炮台遂被日军攻陷。随后,黄金山炮台、摸珠礁炮台、老砺嘴炮台的清军不战而逃,仅西岸炮台的清军在张光前的带领下做最后的抵抗。是日夜,张光前率领部队撤退,“铁打的旅顺”在一日之间全部陷落。
此战,日军伤亡426人,清军伤亡应远超过日军,具体数字不详。
日军占领旅顺后立刻暴露出残忍的本性,经第二军司令大山岩批准,第一师团长山地元治下达命令:“抓住非战斗员也要杀掉,除妇女老幼外全部剪除。”一场针对平民的疯狂大屠杀开始了,日军在旅顺街头“击毙所有遇见的人”,街道上到处都是平民的尸体,英国人艾伦写道:“枪声、呼喊声、尖厉的叫声和呻吟的声音到处回荡……地上浸满了血水……有些小胡同简直被死尸堵住了。”美国人克里曼写道:“海面上许多满载男女老少拥挤的小船缓缓向海中逃离,岸边的日军向小船射击,海上日军的水雷艇也向小船开炮,十几艘小船被击沉,落水的人发出声嘶力竭的呼叫。”直到12月26日,在野蛮屠杀了两万多名平民之后,日军停止了屠杀。因为,旅顺已经没有人可杀了。