2013-06-04 56 views
2

在我的電腦上有3G,Wifi和LAN端口。我想建立一個Linux軟件來顯示綠色,如果網絡流量和紅色沒有網絡流量。網絡流量軟件中斷

TCPDUMP可以提供實時統計信息,但會產生很高的CPU負載。因此我想知道我是否可以通過軟件中斷獲得實時統計數據?只要有網絡流量,就會產生軟件中斷。

在此先感謝

+0

請不要在標題中放置冗餘標籤。您還可能需要指定您正在使用的語言來告訴計算機要執行的操作。 –

+0

感謝您的信息。我會去檢查。順便說一下netfilter模塊是在內核空間還是用戶空間下運行的?在此先感謝 – Winston

+2

@GrantThomas我可以學習任何編程語言來實現我的目標。但在談到實現之前,我想知道可行性 - linux是否爲程序提供網絡流量事件觸發器以捕獲用戶空間? – Winston

回答

1

我不知道你是否願意把這個軟件中斷,但你可以參考下面的例子。 (poll()的第三個參數是以毫秒爲單位的時間,在該時間之後網絡被認爲是不活動的。)

/* compile with -lpcap */ 
/* run as root   */ 

#include <stdio.h> 
#include <sys/poll.h> 
#include <pcap.h> 

int main(int argc, char *argv[]) 
{ 
    int color = 0; 
    struct pollfd ufd; 
    struct pcap_pkthdr h; 
    char errbuf[PCAP_ERRBUF_SIZE]; 
    pcap_t *p = pcap_open_live(NULL, 0, 0, 0, errbuf); 
    if (!p) return puts(errbuf), 1; 

    ufd.fd = pcap_fileno(p); 
    ufd.events = POLLIN; 
    for (; ;) 
     switch (poll(&ufd, 1, 100)) 
     { 
     case -1: perror("poll"); return 1; 
     case 0: if (color) color = 0, puts("red"); break; 
     default: if (!color) color = 1, puts("green"); 
        pcap_next(p, &h); 
     } 
}