???????? POP3(Post Office Protocol 3) POP適用于C/S結(jié)構(gòu)的脫機(jī)模型的電子郵件協(xié)議,目前已發(fā)展到第三版,稱POP3.用于從POP3郵件服務(wù)器上下載郵件.這個(gè)協(xié)議很簡(jiǎn)單.命令只有12個(gè).一般情況下,大多數(shù)現(xiàn)有的POP3客戶與服務(wù)器執(zhí)行采用ASCII明文發(fā)送用戶名和口令,在 認(rèn)可狀態(tài)等 待客戶連接的情況下,客戶發(fā)出連接,并由命令USER和PASS對(duì)在網(wǎng)絡(luò)上發(fā)送明文用戶名和 口令給服務(wù)器,為了避免發(fā)送明文口令的問題使用APOP,口令在傳輸之前被加密.但是目前大多數(shù)windows上的郵件客戶軟件不支持APOP命令.所以如果在進(jìn)行ARP欺騙后就可以對(duì)內(nèi)網(wǎng)使用POP3協(xié)議下載郵件的用戶進(jìn)行嗅探.所以在使用OutlookExpress等客戶端登陸POP3服務(wù)器的時(shí)候就要小心有人嗅你的密碼

.
?????????編寫嗅POP3的嗅探器并不難,在我的以前的貼子里的ARP欺騙的基礎(chǔ)上加十幾行代碼就可以實(shí)現(xiàn)了

.可以供大家學(xué)習(xí)參考練習(xí)用,實(shí)際上的作用不是很強(qiáng).
???????? 首先,分析POP3協(xié)議就知道POP3服務(wù)器開在110端口.我們就可以先判斷包是否是TCP包,如果是的就查看連接的端口,是110就說明是在使用POP3協(xié)議進(jìn)行會(huì)話.IP頭的第10個(gè)字節(jié)(加上14個(gè)字節(jié)以太頭,就是整個(gè)幀的第24個(gè)字節(jié))為0x06就表示后面跟的是TCP包.使用POP3會(huì)話時(shí)IP頭一般是20個(gè)字節(jié)長(zhǎng),所以一般不用去計(jì)算IP頭的長(zhǎng)度.默認(rèn)20字節(jié)處理,這樣效率會(huì)好點(diǎn).
TCP頭的第3,4兩個(gè)字節(jié)(整個(gè)幀的第37.38字節(jié))是目的端口號(hào).判斷是否是110.
???????? 然后,發(fā)現(xiàn)POP3協(xié)議的包后就分析POP3的命令,由于是嗅用戶名與口令,所以我們就只需對(duì)USER和PASS兩條命令進(jìn)行判斷,POP3命令采用命令行形式,用ASCII碼表示.POP3命令由一個(gè)命令和一些參數(shù)組成,所有命令以一個(gè)CRLF對(duì)結(jié)束。命令和參數(shù)由可打印的ASCII字字符組成,它們之間由空格間隔。命令一般是三到四個(gè)字母,每個(gè)參數(shù)卻可達(dá)40個(gè)字符長(zhǎng)。不過用戶名和口令基本上都在20個(gè)字節(jié)以內(nèi).命令是在TCP的數(shù)據(jù)部分的開頭.所以通過計(jì)算TCP頭的長(zhǎng)度(一般也是20個(gè)字節(jié)),在加上34,就是POP3命令數(shù)據(jù)的起點(diǎn)了.
???????? 再判斷命令是否為USER和PASS.判斷的時(shí)候沒必要將他們輸入字符串進(jìn)行比較,直接從數(shù)據(jù)起點(diǎn)取unsigned long形數(shù)據(jù)與0x55534552與0x50415353進(jìn)行比較就行,更快.如果是USER或PASS就記錄他們后面一個(gè)空格(0x20)后的字符串,直道CR停止

.
???????? 這樣就記錄了用戶名與口令.當(dāng)然你還要記錄別人登陸服務(wù)器的IP,不然你也不知道去哪登錄

.
?????????本人菜鳥,不當(dāng)之處請(qǐng)不吝指點(diǎn).
????????????????????????????????????????????????????????????????????????????saga.constantine
?????????????????????????????????????????????????????????????????????????????????2006.05.11
????????