2
在我的電腦上有3G,Wifi和LAN端口。我想建立一個Linux軟件來顯示綠色,如果網絡流量和紅色沒有網絡流量。網絡流量軟件中斷
TCPDUMP可以提供實時統計信息,但會產生很高的CPU負載。因此我想知道我是否可以通過軟件中斷獲得實時統計數據?只要有網絡流量,就會產生軟件中斷。
在此先感謝
在我的電腦上有3G,Wifi和LAN端口。我想建立一個Linux軟件來顯示綠色,如果網絡流量和紅色沒有網絡流量。網絡流量軟件中斷
TCPDUMP可以提供實時統計信息,但會產生很高的CPU負載。因此我想知道我是否可以通過軟件中斷獲得實時統計數據?只要有網絡流量,就會產生軟件中斷。
在此先感謝
我不知道你是否願意把這個軟件中斷,但你可以參考下面的例子。 (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);
}
}
請不要在標題中放置冗餘標籤。您還可能需要指定您正在使用的語言來告訴計算機要執行的操作。 –
感謝您的信息。我會去檢查。順便說一下netfilter模塊是在內核空間還是用戶空間下運行的?在此先感謝 – Winston
@GrantThomas我可以學習任何編程語言來實現我的目標。但在談到實現之前,我想知道可行性 - linux是否爲程序提供網絡流量事件觸發器以捕獲用戶空間? – Winston