如何理解抓包
1.抓包(packet capture)就是將網(wǎng)絡(luò)傳輸發(fā)送與接收的數(shù)據(jù)包進(jìn)行截獲、重發(fā)、編輯、轉(zhuǎn)存等操作,也用來(lái)檢查網(wǎng)絡(luò)安全。抓包也經(jīng)常被用來(lái)進(jìn)行數(shù)據(jù)截取等
2.網(wǎng)絡(luò)技術(shù)與設(shè)備
數(shù)據(jù)在網(wǎng)絡(luò)上是以很小的稱為幀(Frame)的單位傳輸?shù)?,幀由幾部分組成,不同的部分執(zhí)行不同的功能。幀通過(guò)特定的稱為網(wǎng)絡(luò)驅(qū)動(dòng)程序的軟件進(jìn)行成型,然后通過(guò)網(wǎng)卡發(fā)送到網(wǎng)線上,通過(guò)網(wǎng)線到達(dá)它們的目的機(jī)器,在目的機(jī)器的一端執(zhí)行相反的過(guò)程。接收端機(jī)器的以太網(wǎng)卡捕獲到這些幀,并告訴操作系統(tǒng)幀已到達(dá),然后對(duì)其進(jìn)行存儲(chǔ)。就是在這個(gè)傳輸和接收的過(guò)程中,嗅探器會(huì)帶來(lái)安全方面的問(wèn)題。
每一個(gè)在局域網(wǎng)(LAN)上的工作站都有其硬件地址,這些地址惟一地表示了網(wǎng)絡(luò)上的機(jī)器(這一點(diǎn)與Internet地址系統(tǒng)比較相似)。當(dāng)用戶發(fā)送一個(gè)數(shù)據(jù)包時(shí),如果為廣播包,則可達(dá)到局域網(wǎng)中的所有機(jī)器,如果為單播包,則只能到達(dá)處于同一碰撞域中的機(jī)器。
在一般情況下,網(wǎng)絡(luò)上所有的機(jī)器都可以“聽(tīng)”到通過(guò)的流量,但對(duì)不屬于自己的數(shù)據(jù)包則不予響應(yīng)(換句話說(shuō),工作站A不會(huì)捕獲屬于工作站B的數(shù)據(jù),而是簡(jiǎn)單地忽略這些數(shù)據(jù))。如果某個(gè)工作站的網(wǎng)絡(luò)接口處于混雜模式,那么它就可以捕獲網(wǎng)絡(luò)上所有的數(shù)據(jù)包和幀。
3.網(wǎng)絡(luò)監(jiān)聽(tīng)原理
Sniffer程序是一種利用以太網(wǎng)的特性把網(wǎng)絡(luò)適配卡(NIC,一般為以太網(wǎng)卡)置為雜亂(promiscuous)模式狀態(tài)的工具,一旦網(wǎng)卡設(shè)置為這種模式,它就能接收傳輸在網(wǎng)絡(luò)上的每一個(gè)信息包。
普通的情況下,網(wǎng)卡只接收和自己的地址有關(guān)的信息包,即傳輸?shù)奖镜刂鳈C(jī)的信息包。要使Sniffer能接收并處理這種方式的信息,系統(tǒng)需要支持BPF,Linux下需要支持SOCKET一PACKET。但一般情況下,網(wǎng)絡(luò)硬件和TCP/IP堆棧不支持接收或者發(fā)送與本地計(jì)算機(jī)無(wú)關(guān)的數(shù)據(jù)包,所以,為了繞過(guò)標(biāo)準(zhǔn)的TCP/IP堆棧,網(wǎng)卡就必須設(shè)置為我們剛開(kāi)始講的混雜模式。一般情況下,要激活這種方式,內(nèi)核必須支持這種偽設(shè)備Bpfilter,而且需要root權(quán)限來(lái)運(yùn)行這種程序,所以sniffer需要root身份安裝,如果只是以本地用戶的身份進(jìn)入了系統(tǒng),那么不可能喚探到root的密碼,因?yàn)椴荒苓\(yùn)行Sniffer。
基于Sniffer這樣的模式,可以分析各種信息包并描述出網(wǎng)絡(luò)的結(jié)構(gòu)和使用的機(jī)器,由于它接收任何一個(gè)在同一網(wǎng)段上傳輸?shù)臄?shù)據(jù)包,所以也就存在著捕獲密碼、各種信息、秘密文檔等一些沒(méi)有加密的信息的可能性。這成為黑客們常用的擴(kuò)大戰(zhàn)果的方法,用來(lái)奪取其他主機(jī)的控制權(quán)