前面講到,register_netdev首先為網路裝置介面分配乙個名稱,然後將dev插入到乙個叫做dev_base的網路裝置全域性鍊錶中。由此我們不難想到,通過訪問dev_base,就可以遍歷到系統中的所有網路裝置,而每乙個網路裝置介面都有乙個net_device結構來表示。該結構中有乙個成員函式指標:
struct net_device_stats* (*get_stats)(struct net_device *dev);
它返回乙個struct net_device_stats結構,該結構儲存了所在網路裝置介面的詳細的流量統計資訊:
struct net_device_stats
;
ok,有了這些基礎知識,我們就可以寫乙個網路流量統計的核心模組了,這是乙個最簡單的程式,它每次被插入到核心中時,會在日誌檔案中打出當前系統上的所有網路裝置介面的傳輸的和收到的位元組數和包數。我們可以把它進一步改造,輸出到/proc檔案系統,再通過使用者空間的乙個程式計算單位時間的流量,就成為乙個真正的網路流量統計程式了。
下面是**:
/* netbase.c
* 2006-03-14
*/
#include
#include
module_author("linqiang he, hangzhou china");
module_license("dual bsd/gpl");
static int __init netbase_init_module(void)
return 0;
}
static void __exit netbase_exit_module(void)
module_init(netbase_init_module);
module_exit(netbase_exit_module);
下面是在我的電腦上的某一時刻的輸出結果:
mar 14 21:22:34 localhost kernel: dev name: lo
mar 14 21:22:34 localhost kernel: transmitted bytes: 4660
mar 14 21:22:34 localhost kernel: received bytes: 4660
mar 14 21:22:34 localhost kernel: transmitted packets: 61
mar 14 21:22:34 localhost kernel: received packets: 61
mar 14 21:22:34 localhost kernel: dev name: sit0
mar 14 21:22:34 localhost kernel: transmitted bytes: 0
mar 14 21:22:34 localhost kernel: received bytes: 0
mar 14 21:22:34 localhost kernel: transmitted packets: 0
mar 14 21:22:34 localhost kernel: received packets: 0
mar 14 21:22:34 localhost kernel: dev name: eth0
mar 14 21:22:34 localhost kernel: transmitted bytes: 437071
mar 14 21:22:34 localhost kernel: received bytes: 4046403
mar 14 21:22:34 localhost kernel: transmitted packets: 2607
mar 14 21:22:34 localhost kernel: received packets: 17773
乙個統計伺服器網路流量的小程式
因為工作需要,要統計一下伺服器的網路吞吐量,並且出乙個圖表。在搜尋網路吞吐量軟體時候,看到這篇文章,於是決定用指令碼來實現這個功能。bigtall在原文的啟發下,做了一些修改,去掉了對unix工具的依賴,把它變成了乙個純的批處理檔案。希望能給有需要的人幫助。1 echo off2 args 3rem...
乙個簡單的verlig程式 乙個簡單C程式的介紹
我們前面學了c語言的一些理論知識,今天通過乙個簡單的程式先來看一看c語言程式是什麼樣子。然後再對程式中的 進行介紹。這個語句的功能是進行有關的預處理操作。include稱為檔案包含命令,後面尖括號的內容稱為標頭檔案或首檔案。此處指包含stdio.h系統標頭檔案,在下面主函式中使用的printf 函式...
Unity網路互動丨乙個簡單的網路程式
本章目的 實現乙個簡單的網路程式,了解基本的內容 方法 建立乙個伺服器端vs工程,乙個客戶端vs工程 此時開著兩個vs!先執行伺服器端工程,再執行客戶端工程 開始執行,不除錯 看到客戶端先向伺服器傳送字串,伺服器端收到後,將這個字串返回到客戶端,客戶端將它列印出來 以下是上述兩個工程 using s...