色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

一文手把手教你Android中的 eBPF 流量監控

如意 ? 來源:CSDN ? 作者:Peter盼 ? 2020-06-20 10:34 ? 次閱讀

eBPF 網絡流量工具結合使用內核與用戶空間實現來監控設備自上次啟動以來的網絡使用情況。它提供了額外的功能(如套接字標記、分離前臺/后臺流量,以及按 UID 劃分的防火墻),以根據手機狀態阻止應用訪問網絡。從該工具收集的統計數據存儲在稱為 eBPF maps 的內核數據結構中,并且相應結果由 NetworkStatsService 等服務用來提供自設備上次啟動以來的持久流量統計數據。

示例和來源

用戶空間更改主要在 system/netd 和 framework/base 項目中。開發工作在 AOSP 中完成,因此 AOSP 代碼將始終保持最新狀態。源代碼主要位于 system/netd/server/TrafficController*、system/netd/bpfloader 和 system/netd/libbpf/ 中。此外,一些必要的框架變更也在 framework/base/ 和 system/core 中。

實現

Android 9 開始,內核版本為 4.9 或更高且最初搭載了 Android P 版本的 Android 設備必須使用基于 eBPF 的網絡流量監控記帳模塊,而不是 xt_qtaguid。新的基礎架構更靈活且更易于維護,并且不需要任何外部內核代碼。

舊版流量監控和 eBPF 流量監控之間的主要設計差異如圖 1 所示。

一文手把手教你Android中的 eBPF 流量監控

圖 1.舊版流量監控(左)和 eBPF 流量監控(右)的設計差異

新的 trafficController 設計基于 cgroup 級的 eBPF 過濾器以及內核中的 xt_bpf netfilter 模塊。這些 eBPF 過濾器在收發數據包時應用,數據包需要通過這些過濾器。cgroup eBPF 過濾器位于傳輸層,負責根據套接字 UID 以及用戶空間設置對正確的 UID 計算流量。xt_bpf netfilter 掛接在 bw_raw_PREROUTING 和 bw_mangle_POSTROUTING 鏈上,負責對正確的接口計算流量。

在啟動時,用戶空間進程 trafficController 會創建用于收集數據的 eBPF 映射,并將所有映射作為虛擬文件固定在 sys/fs/bpf。然后,特權進程 bpfloader 將預編譯的 eBPF 程序加載到內核中,并將其附加到正確的 cgroup。所有流量都對應于同一個根 cgroup,因此默認情況下,所有進程都應包含在該 cgroup 中。

在運行時,trafficController 可以通過將數據寫入 traffic_cookie_tag_map 和 traffic_uid_counterSet_map 來標記/取消標記套接字。NetworkStatsService 可以從 traffic_tag_stats_map、traffic_uid_stats_map 和 traffic_iface_stats_map 中讀取流量統計數據。除了流量統計數據收集功能之外,trafficController 和 cgroup eBPF 過濾器還負責根據手機設置屏蔽來自某些 UID 的流量?;?UID 的網絡流量屏蔽功能取代了內核中的 xt_owner 模塊,并且可以通過將數據寫入 traffic_powersave_uid_map、traffic_standby_uid_map 和 traffic_dozable_uid_map 來配置詳細模式。

新實現遵循舊版 xt_qtaguid 模塊實現,因此 TrafficController 和 NetworkStatsService 將使用舊版實現或新實現運行。如果應用使用公共 API,那么無論在后臺使用 xt_qtaguid 還是 eBPF 工具,應該沒有任何區別。

如果設備內核基于 Android 通用內核 4.9(SHA39c856663dcc81739e52b02b77d6af259eb838f6 或更高版本),則無需修改 HAL、驅動程序或內核代碼,即可實現新的 eBPF 工具。

要求

內核配置必須開啟以下配置:

驗證是否已開啟正確配置時,VTS 內核配置測試非常有用。

CONFIG_CGROUP_BPF=y

CONFIG_BPF=y

CONFIG_BPF_SYSCALL=y

CONFIG_NETFILTER_XT_MATCH_BPF=y

CONFIG_INET_UDP_DIAG=y

設備 MEM_LOCK 資源限制必須設為 8 MB 或更多。

舊版 xt_qtaguid 棄用過程

新的 eBPF 工具正在逐步取代 xt_qtaguid 模塊以及它所基于的 xt_owner 模塊。我們將開始從 Android 內核中移除 xt_qtaguid 模塊,并停用不必要的配置。

在 Android 9 版本中,xt_qtaguid 模塊在所有設備上都處于開啟狀態,但直接讀取 xt_qtaguid 模塊 proc 文件的所有公共 API 都移到了 NetworkManagement 服務中。根據設備內核版本和初始 API 級別,NetworkManagement 服務能夠知道 eBPF 工具是否處于開啟狀態,并選擇正確的模塊來獲取每個應用的網絡使用情況統計數據。sepolicy 會阻止 SDK 級別為 28 及以上的應用訪問 xt_qtaguid proc 文件。

在 Android 9 之后的下一個版本中,我們將完全阻止應用訪問這些 xt_qtaguid proc 文件,并開始從新的 Android 通用內核中移除 xt_qtaguid 模塊。移除該模塊后,我們將更新相應內核版本的 Android 基礎配置,以明確關閉 xt_qtaguid 模塊。當 Android 版本的最低內核版本要求為 4.9 或更高時,我們將徹底棄用 xt_qtaguid 模塊。

在 Android 9 版本中,只有搭載 Android 9 版本的設備才需要具備新的 eBPF 功能。如果設備搭載的內核可以支持 eBPF 工具,我們建議在升級到 Android 9 版本時,將設備更新為采用新的 eBPF 功能。沒有強制執行該更新的 CTS 測試。

驗證

您應該定期從 Android 通用內核和 Android AOSP 主分支獲取補丁程序。請確保您的實現通過適用的 VTS 和 CTS 測試,即 netd_unit_test 和 libbpf_test。

測試

提供了內核 net_tests,用來確保您開啟了必需的功能,并向后移植了必需的內核補丁程序。這些測試已集成到 Android 9 版本 VTS 測試中。system/netd/ 中有一些單元測試(netd_unit_test 和 libbpf_test)。netd_integration_test 中有一些驗證新工具整體行為的測試。

CTS 和 CTS 驗證程序

由于這兩個流量監控模塊在 Android 9 版本中都得到支持,因此沒有強制在所有設備上實現新模塊的 CTS 測試。不過,對于內核版本高于 4.9 且最初搭載了 Android 9 版本(即,初始 API 級別大于等于 28)的設備,提供了基于 GSI 的 CTS 測試,用于驗證是否正確配置了新模塊。舊的 CTS 測試(如TrafficStatsTest、NetworkUsageStatsTest 和 CtsNativeNetTestCases)可用于驗證新模塊的行為是否與舊的 UID 模塊一致。

手動測試

system/netd/中有一些單元測試(netd_unit_test、netd_integration_test 和 libbpf_test)。此外,還提供了 dumpsys 支持,以便手動檢查狀態。dumpsys netd 命令可顯示 trafficController 模塊的基本狀態以及是否正確開啟了 eBPF。如果 eBPF 處于開啟狀態,dumpsys netd trafficcontroller 命令會顯示每個 eBPF 映射的詳細內容,包括帶標記的套接字信息、每個標記的統計數據、UID 和 iface,以及所有者 UID 匹配項。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Android
    +關注

    關注

    12

    文章

    3943

    瀏覽量

    127743
  • 流量監控
    +關注

    關注

    0

    文章

    18

    瀏覽量

    7383
  • BPF
    BPF
    +關注

    關注

    0

    文章

    25

    瀏覽量

    4032
收藏 人收藏

    評論

    相關推薦

    手把手教你做星閃無人機》即將開播,鎖定15日晚七點!

    ”再次聯合推出《手把手教你做星閃無人機—KaihongOS星閃無人機開發實戰》系列課程,該課程與《手把手教你做PC—KaihongOS筆記本電腦開發實戰》同步并行,
    的頭像 發表于 01-13 19:42 ?85次閱讀
    《<b class='flag-5'>手把手</b><b class='flag-5'>教你</b>做星閃無人機》即將開播,鎖定15日晚七點!

    手把手教你做PC》課程即將啟動!深開鴻引領探索KaihongOS筆記本電腦開發實戰

    ”攜手“電子發燒友”聯合推出了《KaihongOS手把手系列直播課程》,該系列課程以實際產品為案例,詳細講解每個產品的開發全流程。此次首發內容是《手把手教你做PC-
    的頭像 發表于 01-06 20:46 ?128次閱讀
    《<b class='flag-5'>手把手</b><b class='flag-5'>教你</b>做PC》課程即將啟動!深開鴻引領探索KaihongOS筆記本電腦開發實戰

    源碼開放 智能監測電源管理教程寶典!

    源碼開放,今天我們學習的是電源管理系統的核心功能模塊,手把手教你如何通過不同的技術手段實現有效的電源管理。
    的頭像 發表于 12-11 09:26 ?322次閱讀
    源碼開放  智能監測電源管理教程寶典!

    Air780E模組LuatOS開發實戰 —— 手把手教你搞定數據打包解包

    本文要說的是低功耗4G模組Air780E的LuatOS開發實戰,我將手把手教你搞定數據打包解包。
    的頭像 發表于 12-03 11:17 ?252次閱讀
    Air780E模組LuatOS開發實戰 —— <b class='flag-5'>手把手</b><b class='flag-5'>教你</b>搞定數據打包解包

    手把手教你如何自制目標檢測框架

    今天,給大家分享篇來自知乎的篇關于目標檢測相關的些內容, 本文基于Pytorch進行編寫。
    的頭像 發表于 11-14 16:39 ?259次閱讀
    <b class='flag-5'>手把手</b><b class='flag-5'>教你</b>如何自制目標檢測框架

    手把手教你通過宏集物聯網工控屏&amp;網關進行協議轉換,將底層PLC/傳感器的數據轉換為TCP協議并傳輸到用戶

    手把手教你通過宏集物聯網工控屏&網關進行協議轉換,將底層PLC/傳感器的數據轉換為TCP協議并傳輸到用戶終端
    的頭像 發表于 08-15 13:29 ?613次閱讀
    <b class='flag-5'>手把手</b><b class='flag-5'>教你</b>通過宏集物聯網工控屏&amp;網關進行協議轉換,將底層PLC/傳感器的數據轉換為TCP協議并傳輸到用戶

    手把手教你在orcad設置CIS元器件數據庫,提高工作效率

    元器件數據庫,就是實現上述查找元件、放置元件時所需要調用的數據庫。本文將手把手教你如何在orcad配置CIS元器件數據庫。
    的頭像 發表于 06-15 17:27 ?6624次閱讀
    <b class='flag-5'>手把手</b><b class='flag-5'>教你</b>在orcad<b class='flag-5'>中</b>設置CIS元器件數據庫,提高工作效率

    手把手教你使用物模型連接DDSU電表

    物模型其實就是云平臺對產品功能的數字化描述。以“燈”為例,最簡單的“燈”具有“開”和“關”屬性,只需要在平臺定義個布爾量的數據點位,有些高級的“燈”還具有“亮度”、“色溫”、“顏色”等屬性,可以
    的頭像 發表于 06-14 08:21 ?489次閱讀
    <b class='flag-5'>手把手</b><b class='flag-5'>教你</b>使用物模型連接DDSU電表

    手把手教你排序算法怎么寫

    今天以直接插入排序算法,給大家分享下排序算法的實現思路,主要包含以下部分內容:插入排序介紹插入排序算法實現手把手教你排序算法怎么寫在添加新的記錄時,使用順序查找的方式找到其要插入的位置,然后將
    的頭像 發表于 06-04 08:03 ?749次閱讀
    <b class='flag-5'>手把手</b><b class='flag-5'>教你</b>排序算法怎么寫

    手把手帶你移植HAL庫函數

    開發者更高效地進行嵌入式開發。手把手帶你移植HAL庫函數HAL庫提供了套抽象接口,使開發者無需直接操作底層硬件寄存器,就能實現對硬件的控制。這種抽象使得代碼能夠更
    的頭像 發表于 05-18 08:04 ?2065次閱讀
    <b class='flag-5'>手把手</b>帶你移植HAL庫函數

    手把手教你PCB上怎么畫GND?

    模擬電路的考核核心指標就是信號的精度。失去精度,模擬電路也就失去了原本的功能意義。交流電源的地線CGND由于是正弦波,是周期性的上下波動變化,它的電壓也是上下波動,不是像直流地線GND樣始終維持在個0V上不變。
    發表于 03-27 10:56 ?1423次閱讀
    <b class='flag-5'>手把手</b><b class='flag-5'>教你</b>PCB上怎么畫GND?

    無刷電機無感FOC控制培訓系列課程

    | 本工作室推出電機控制無感foc電機控制系列培訓課程本課程主要讓想進階的算法工程師,和剛參加工作的工程師或者在校學生能夠進步提高自己的技能,1.從企業用人角度手把手教你做電機控制,提高你的個人
    發表于 03-10 13:52

    【先楫HPM5361EVK開發板試用體驗】(原創)6.手把手實戰紅外線傳感器源代碼

    試用體驗】2手把手實戰密鑰管理器 KEYM 【先楫HPM5361EVK開發板試用體驗】3手把手實戰安全數據處理器 SDP 【先楫HPM5361EVK開發板試用體驗】4手把手實戰EXIP在線解密引擎 【先
    發表于 02-09 15:08

    【先楫HPM5361EVK開發板試用體驗】(原創)5.手把手實戰AI機械臂

    HPMicro 【先楫HPM5361EVK開發板試用體驗】2手把手實戰密鑰管理器 KEYM 【先楫HPM5361EVK開發板試用體驗】3手把手實戰安全數據處理器 SDP 【先楫HPM5361EVK開發板
    發表于 02-06 10:28

    【飛騰派4G版免費試用】4.手把手玩轉QT界面設計

    完成了使用Qt Designer進行界面設計的全部流程!是不是覺得像魔法樣神奇呢?趕緊試試吧! 接上三篇: 【飛騰派4G版免費試用】1.實戰交叉編譯環境搭建和手把手uboot編譯 【飛騰派4G版免費
    發表于 01-27 12:49
    主站蜘蛛池模板: 国产精品久久久久久久久99热 | 天堂无码人妻精品AV一区 | 迅雷哥在线观看高清 | 久久热在线视频精品1 | 91精品在线国产 | 中文字幕专区高清在线观看 | 伸进同桌奶罩里摸她胸作文 | 午夜伦理电影在线观免费 | 2017必看无码作品 | 久久足恋网 | 亚洲视频第二页 | 久久日本精品在线热 | 三级黄色在线视频中文 | 精品夜夜澡人妻无码AV蜜桃 | 国产 浪潮AV性色四虎 | 饥渴的护士自慰被发现 | 大香交伊人 | 最新高清无码专区在线视频 | 欧美18在线| 无套暴躁白丝秘书 | 电影内射视频免费观看 | 白丝高中生被c爽哭 | 青柠电影在线看 | 午夜AV亚洲一码二中文字幕青青 | 野花4在线观看 | 奇米狠狠一区二区三区 | 一二三四高清中文版视频 | 欧美日本韩国一二区视频 | 久久久久久久免费 | 成人短片迅雷下载 | 美女裸露100%奶头视频 | 亚洲国产成人精品不卡青青草原 | 欧美精品一区二区三区四区 | 天堂so导航 | 日韩高清一区二区三区不卡 | 午夜福利理论片在线播放 | 果冻传媒视频在线播放 | 大胆国模一区二区三区伊人 | 2021扫黑风暴在线观看免费完整版 | 老司机午夜影院味味 | 四虎影视库永久免费 |