婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Linux內核實現多路鏡像流量聚合和復制的方法

Linux內核實現多路鏡像流量聚合和復制的方法

熱門標簽:南京電銷外呼系統廠家 南通電銷外呼系統排名 信陽智能外呼系統聯系方式 宿松百度地圖標注 滁州外呼系統接口對接 地圖標注怎么兼職 地圖標注和視頻彩鈴制作生意 營業廳外呼系統有錄音嗎 合力億捷外呼系統如何解壓安裝
我們在進行安全性監控、測試的過程中,難免會遇到這樣的問題:需要部署大量基于鏡像流量的安全設備,如IPS,異常流量,數據庫審計,流量分析等,可是交換機上可以做鏡像流量的端口數量有限制,購買專業的設備又太昂貴。

本文就針對此種情況,從Linux內核模塊對網絡數據庫包進行處理,解決上述問題。

應用場景

我們在進行安全性監控、測試的過程中,難免會遇到這樣的問題:需要部署大量基于鏡像流量的安全設備,如IPS,異常流量,數據庫審計,流量分析等,可是交換機上可以做鏡像流量的端口數量有限制,購買專業的設備又太昂貴。

本文就針對此種情況,從Linux內核模塊對網絡數據庫包進行處理,解決上述問題。這里也感謝“白金PT”給予的幫助。

架構設計

內核模塊的流程比較簡單,轉發配置從用戶態提交給內核模塊,如”eth1@eth2_eth1@eth3_eth1/eth4@eth5“,這段的配置是:

來自eth1的流量,復制給eth2和eth3

來自eth1和eth4的流量,聚合給eth5

MIRROR內核模塊中,只需要實現參數讀取,配置分析,網卡判斷(源,目的)即可。

算法、代碼實現

參數輸入

這段代碼的功能是,將前面提到的如“eth1@eth2_eth1@eth3_eth1/eth4@eth5“這樣的參數,按照”_”進行拆分,分段提交給參數設置函數”option_setup”

參數設置

這里我們把得到的參數”eth0@eth1”進行進一步的拆分,分出了源網卡eth0,目的網卡eth1,在內核模塊的全局變量中,有一個結構

”__read_mostly __u8 ethout_bits[MAX_OUT] ={0};“

用來存儲每個網卡對應分發的網卡號,可以這樣理解,如果服務器有8個網卡,那么每個網都會有一個8位的二進制數來標明它的轉發,比如eth0復制到eth1,那么ethout_bits[0]就等于01000000,以此類推,如果我要把eth0復制到其他所有網卡,就會是01111111。

同時用一個全局的8字節變量,來存儲哪些網卡是鏡像流量口,防止多余的資源浪費。

__read_mostly__u8 ifindex_bits = 0;

Skb包復制和轉發

當Linux內核收到一個skb結構的數據包時,判斷這個數據包是不是在轉發列表里,也就是網卡是不是鏡像源。

接著我用了一個循環,來遍歷存儲的轉發目的網口,如果匹配的話,就使用skb_clone函數將數據包復制一份,然后通過dev_queue_xmit函數直接發送出去。

最后清理skb_buff結構。

啟動腳本

為了方便調試和快速提交參數,可以使用如下的shell腳本:

實測效果

編譯,填充參數并執行

執行sh sh.sh

Dmesg輸出

鏡像流量效果

這里可以看到流量統計由于網卡速率,時間差等,并不會100%一樣,是正常的。

CPU占用

當流量已經達到400M左右的時候,CPU占用仍然比較低。

MIRROR.c源代碼與pdf格式下載

標簽:衢州 銅陵 山南 保定 運城 麗水 潛江 新余

巨人網絡通訊聲明:本文標題《Linux內核實現多路鏡像流量聚合和復制的方法》,本文關鍵詞  Linux,內核,實現,多路,鏡像,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Linux內核實現多路鏡像流量聚合和復制的方法》相關的同類信息!
  • 本頁收集關于Linux內核實現多路鏡像流量聚合和復制的方法的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 临武县| 黄石市| 高雄县| 开远市| 邹平县| 平谷区| 武宁县| 霍邱县| 县级市| 皮山县| 景宁| 浦江县| 勃利县| 柳河县| 崇信县| 遂溪县| 南陵县| 皋兰县| 旬阳县| 沧源| 疏附县| 成安县| 怀化市| 黔西| 南阳市| 昔阳县| 定日县| 河津市| 武平县| 兴城市| 河池市| 武鸣县| 塘沽区| 卢龙县| 大埔区| 乌兰察布市| 彭泽县| 康平县| 南澳县| 郎溪县| 房产|