嗅探與僞造原理

嗅探


程序接收數據包的過程:python

1.數據包在傳播介質中流動時,網絡中的每一個網卡都能收到全部的數據幀,這些數據幀會被複制到網卡的內存中,而後檢查目的MAC地址,是否爲本身的MAC地址,是,則會經過直接存儲器(DMA)的方式被複制到操做系統內核的緩存中,不然拒絕接收。而後網卡會以中斷的方式告訴CPU,接收到了新數據,CPU會將這些數據從緩存複製到一個隊列中(鏈路層驅動),爲新數據的到來騰出空間。緩存

2.而後經過協議棧,檢查網絡層頭部,目的IP地址,目的IP地址不是本身的IP,會進行丟棄,在檢查傳輸層的目的端口,交給相應的程序。會依次去掉各層的頭部,交給程序的是數據部分。網絡


以下圖:socket

Sniffer 程 序  鏈 路 一 驅  緩 存  網 卡  網 絡  用 戶 空 間  協 議 棧  OS 內 核

Q: Sniffer程序位於用戶空間部分,想觀察到完整的(包含首部信息)、未經處理的、沒有進行丟棄的數據包,怎麼辦?操作系統

A: OS內核 爲嗅探程序 提供了 一個Raw Socket API ,當數據包到達鏈路層驅動位置,會進行復制,經過raw socket 交給嗅探程序,若是有多個嗅探程序,會複製多份,分別交付。以下圖:blog

Sniffer 程 序  raw socket  co PY  鏈 路 一 驅 一  緩 存  網 卡  網 絡  用 戶 空 間  協 議 棧  OS 內 核

Sniffer程序並不須要得到全部的報文,可能只須要得到其中的一小部分報文,好比UDP報文,這裏就須要進行過濾,UNIX系統添加了一個BSD 數據包過濾器(BSD packet filter,BPF),以下圖:隊列

Sniffer 程 序  raw socket  B P F 過 濾 器  鏈 路 一 驅 一  緩 存  網 卡  網 絡  用 戶 空 間  協 議 棧  OS 內 核

Q:爲何不在Sniffer程序處過濾,而在OS內核裏面進行過濾?內存

A: 能夠節省資源,在數據包複製以前進行過濾,以後進行復制的數據包相應大大減小。資源

注意:Sniffer程序,嗅探的是收包的過程。(站在攻擊者的角度)程序


僞造


正常的應用程序 僅僅向OS 內核提供數據,目的IP地址,目的端口等信息,其餘構造數據包的過程都交給OS內核去完成,而不能隨意的去構造各個包頭。與嗅探同樣,這列也可用raw socket API,進行數據包的構造,而後交給下層,發送出去。以下圖:

應 用 程 序  ocket AP  協 議 棧  網 絡  spoof 不 帛  aw socket  網 卡

注意:該圖是簡化的圖,大致理解一下過程,沒有具體說起OS內核中的鏈路層操做。

另外,進行僞造,通常是發包的過程。(站在攻擊者的角度)





以後會提供相應python、c代碼。

相關文章
相關標籤/搜索