看到網上有人講解Fedora 9下安裝PF-RING的過程,都是幾年前的了,比較老了,我安裝PF-RING就是為了使用libpcap庫,libpcap的原理是通過socket將數據包從網卡 捕獲數據包,然後在提交給應用程序,和winpcap很大的區別是,libpcap采用的是2個緩沖區,內核類似的一個乒乓操作。winpcap采用的是環狀緩沖區,在winpcap下當網卡有數據到來時,npf.sys就會將數據拷貝到內核緩沖區中,而內核驅動實際上是一個Ndis協議驅動,當內核緩沖區的數據包大小達到一個阈值mintocopysize時,它就會將數據包拷貝到應用緩沖區中,kernelbuffer和userbuffer,及mintocopysize都提供了函數進行設置的。那麼為什麼在windows平台進行包捕獲的時候,千兆網的條件下,都很少有包丟失呢,為什麼在linux環境下進行包捕獲,丟包率很大,這就要仔細分析源碼了,winpcap的npf.sys是一個Ndis協議驅動,它和TCP/IP協議是同一層的,即采用winpcap捕獲數據包,數據包就不需要經過tcp/ip層了,而libpcap是linux下的捕獲包,他是在應用層之上的,及在tcp/ip協議上,本來通過socket可以捕獲包的,libpcap不過是對socket進行了一次封裝,在socket上面有提供了一層接口,方面用戶的調用。libpcap捕獲包的流程如下:
Linux 的 libpcap 詳細流程為:網卡硬中斷 -> 軟中斷 -> 內核協議棧 -> 系統調用 ->socket 接口 ->libpcap 接口 -> 用戶應用程序,在這個流程中,可以看出數據的 copy 比較多。所以 libpcap 抓包丟包嚴重也不用感到奇怪了,為了減少丟包率,采用 libpcap-pfring 方法。
下面講解 Fedora 9 下如何安裝 PF-RING ,安裝過程如下:
1)cd /home 然後再這裡建立一個目錄 mkdir rfring-libpcap
2)cd rfring-libpcap
3)svn co https://svn.ntop.org/svn/ntop/trunk/PF_RING/ 下載 PF-RING
4)PF-RING 下載完後, cd /PF-RING/legacy 下, vi mkpatch.sh 修改內核版本號 ={SUBLEVEL : -25.14}
5)./mkpatch.sh 下載內核到 workspace 中,生成目錄 linux-2.6.25-14-686-smp-PF_RING 和補丁文件 linux-2.6.25-14-686-smp-PF_RING.patch.gz 。
6) 按下面操作
mv linux-2.6.25-14-686-smp-PF_RING/ linux-2.6.25-14-686-smp-PF_RING.bak/
zcat linux-2.6.25-14-686-smp-PF_RING.patch.gz | patch -p0
7 ) cd linux-2.6.25 編譯內核
#vi Makefile 在這個地方加上一個自定義的後綴: EXTRAVERSION = -PF_RING ,這會顯示在界面啟動的時候看到