歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Linux下的數據報文截獲機制

Linux下的數據報文截獲機制

日期:2017/2/28 16:15:34   编辑:Linux教程

很多數據包截獲軟件都使用特定的庫,在Windows下一般使用winpcap,而在Linux和unix下一般都選用libpcap,使用這些庫能在一定程度上減少工作量,加快程序的進程,但往往容易忽略了一些本質的東西,例如libpcap又是怎樣來截獲數據報文的。

分析和了解數據報文截獲的機制對於了解如何才能截獲到無線網絡的管理報文有著重要的意義。

通常的數據報文是如何被處理的呢?如圖3-1所示。當數據到達網卡時,網卡就把數據交給網卡的驅動程序,當驅動程序處理完數據時就把經過處理的數據交給上層的協議棧,當然也會丟棄一部分,上層一般是操作系統內核的一部分。

圖3-1

要截獲到MAC層的數據報文就必須盡可能早的截獲數據,也就是在盡可能在底層截獲數據報文。

Linux和unix系統提供了一種稱為Packet filter的服務,它可以用來截獲數據報文,它是作為內核的一部分存在的,它的層次及工作方式如圖3-2所示。

圖3-2

沒有程序使用Packet filter時,數據還是像圖3-1那樣由驅動程序傳給協議棧,而當有程序使用Packet filter時,情況則會不同。驅動程序首先將數據報文拷貝給Packet filter,然後Packet filter經過程序定義的過濾方式將不需要的數據報文過濾掉,然後將報文放到應用程序的緩沖區中,www.linuxidc.com這時截獲數據報文的應用程序就完成了報文截獲的工作。隨後驅動程序再進行正常的處理,將數據報文傳給協議棧。這就是Packet filter的工作原理。

的類型

不同的操作系統提供了不同Packet filter。

BSD系統:BPF(Berkeley Packet Filter)

Solaris: DLPI(Data Link Provider Interface)

Linux: LSF(Linux Socket filter)

不同Packet filter的實現細節都不相同,但是大致的工作原理是相同的。

要截獲數據報文,可以編寫應用程序使用Packet filter,但是由於不用操作系統上的Packet filter又有差別,因此想要編寫的應用程序能在不同操作系統上使用,就必須對不同Packet filter進行識別並使用。

及工作原理

Libpcap是一個在Linux和unix操作系統下被廣泛使用的數據報文截獲的庫,他被大量有名的軟件所使用,例如tcpdump,ethereal等等。那它又是如何工作的呢?

Libpcap能識別不同操作系統的不同Packet filter,並正確的使用它們,而它向上提供了一個統一的接口讓應用程序調用。他類似於一個抽象層,讓應用程序可以無視底層的Packet filter而只要使用統一的接口就可以實現數據報文截獲,做到了操作系統無關性。分析到這裡也就可以知道Linux和unix下基於libcap的數據報文截獲工具本質上是使用了Packet filter來完成數據報文截獲功能的,Ethereal也不例外。

Copyright © Linux教程網 All Rights Reserved