当前位置:  技术问答>linux和unix

请问在linux下用c语言编程,如何获取网络流量呢?

    来源: 互联网  发布时间:2015-11-20

    本文导语:  我现在要在linux下编程,实时获取当前网络状况。 我只知道可以在目录/proc/net/dev中可以读取文件内容, 但是具体里面什么流量类型不是很明白。 而且在百度上搜到一段程序,不是太懂,而且头文件没有写全,麻烦...

我现在要在linux下编程,实时获取当前网络状况。

我只知道可以在目录/proc/net/dev中可以读取文件内容,

但是具体里面什么流量类型不是很明白。

而且在百度上搜到一段程序,不是太懂,而且头文件没有写全,麻烦各位帮我看看。谢谢!

http://www.cublog.cn/opera/showart.php?blogid=9551&id=93237

|
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

void set_timer(int interval){ /* set the timing interval */

        struct itimerval itv, oldtv;
        itv.it_interval.tv_sec = interval;
        itv.it_interval.tv_usec = 0;
        itv.it_value.tv_sec = interval;
        itv.it_value.tv_usec = 0;
        setitimer(ITIMER_REAL, &itv, &oldtv);
}
void time_handle()
{
int i;

printf("bandwidth is %dn",count);
count=0;

}



int main()
{
int sock;
struct ifreq ifstruct;
struct sockaddr_ll sll;
struct sockaddr_in addr;
char buf[2000];
int r;
int len;
len = sizeof(addr);
if((sock = socket(AF_PACKET, SOCK_RAW, htons(ETH_P_IPV6))) == -1)  //建立socket
{
}
sll.sll_family = PF_PACKET;
        sll.sll_protocol = htons(ETH_P_IPV6);
strcpy(ifstruct.ifr_name, "eth1");
ioctl(sock, SIOCGIFINDEX, &ifstruct);
sll.sll_ifindex = ifstruct.ifr_ifindex;
bind(sock,(struct sockaddr*)&sll,sizeof(struct sockaddr_ll));
signal(SIGALRM, time_handle);
set_timer(1);
count=0;
for(; ;)
{
 r = recvfrom(sock,(char *)buf,sizeof(buf), 0, (struct sockaddr *)&addr,&len);
 count+=r;
}
}
这是我编写的很初级的获得当前网络流量的程序,你可以在其中添加内容,就可以获得不同IP源地址的流量信息了。
我编写的是收IPv6包。将ETH_P_IPV6改为ETH_P_IP就可以收IPv4包了。

|
man proc就清楚了。

|
iptables可以拿到流量

    
 
 

您可能感兴趣的文章:

  • 初学Linux要看什么书?, 请问Linux下C语言编程怎么设置环境?
  • 请问在linux中,怎样用c语言编程来实现对计算机的日期和时间的修改啊?
  • 请问:linux 下 C语言编程 , 如何将 串口 由 全双工 变化为 半双工 通讯 方式?
  • 请问:linux和windows下C语言编程有什么不同?(100分相送)
  • 请问哪里有<<精通Unix下C语言编程与项目实践>>电子书和原代码下载
  • 请问linux下C/C++编程语言,同时请推荐相关书籍
  • 请问要开发一种网络电话,要会什么编程语言?
  • 请问Linux数据库编程是否也可以支持通用的SQL语言进行数据库编写.
  • 请问,C语言socket编程中,客户端如何得到自己的IP?不要0.0.0.0
  • 请问在linux中,怎样用c语言编程来实现对计算机的IP地址、子网掩码的修改啊?
  • 请问linux下一般用什么流量统计软件
  • 请问有在Linux下的流量控制工具吗?
  • 请问哪儿有比较好的基于java的网站流量统计程序下载?(内容空)
  • 急!!!请问有没有实时监测CPU、内存的占用情况以及网络流量系统调用?
  • 请问是谁想要参考数据输入输出流的流量监控?这儿有一个简易的例子供参考
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 急,请问Linux中如何像windows获取网络接口是否插入网线???
  • 请问bash中如何获取一个项目目录下的执行文件的文件名?
  • 请问linux编程获取时间的最小单位是......?
  • 请问如何在C程序中获取linux系统的磁盘剩余空间
  • 急急急,请问如何获得Cpu利用率,可以用libproc.so这个库获取吗?
  • 知道IP地址,请问如何获取这个IP地址对应网卡的mac地址?
  • 请问一个shell中如何获取这个shell自身抛出的错误?
  • 请问SUSE下如何获取文件卷的挂载点?
  • 请问下,TCQ/NCQ的队列深度是硬盘决定的吧?如何获取深度值呢?谢谢!
  • 请问现在哪里可以获取Fedora的源代码?
  • 请问:如何获取文件系统/home的占有量,赋值与变量a
  • 请问高手,如何用linux操作系统里的标准c函数获取bios时间,高分!!!!
  • 请问高手如何在linux环境中获取bios时间,在线等待,急
  • 请问AIX下用什么命令能够获取CPU型号、频率信息,多CPU情况下
  • 请问, 怎样通过程序方式,获取到当前系统的CPU,内存等情况
  • 请问linux下程序如何获取热插拔事件?
  • 请问如何根据一个进程的pid去获取其地址信息?谢谢
  • 高分赠英雄!请问怎样才能获取主机名??
  • 请问在JSP中,如何获取当前时间呀?小弟是新人,请老大门多指点
  • 请问!linux中用什么函数可以获取CPU的频率呢?
  • 请问:我知道路由器的telnet密码,但忘记了enable 密码,请问如何是好?
  • 请问那里有SYBASE的jbdb 2.0下载;jspsmartupload可以直接将文件上传到数据库,请问如何使用
  • 请问最新的reahat9.0是基于什么核心的?2.4?2.6?请问那里能下载?
  • 请问:请问哪里有关于linux基本操作命令讲解的资料下载,最好是幻灯片格式的.
  • 请问,我试图用#admintool&图形工具命令来安装sun workshop5.0,为什么进入的却是用户管理界面?请问具体该如何在solaris下安装应用软件
  • 请问在Redhat 9里,我从登录就是图形介面,请问如何在图形介面内进入命令行方式呢,谢谢
  • 请问玩过SOLARIS的高手门,在不正常关机后,就不能启动到windows公用桌面了,只能在命令提示模式下了,请问怎么解决这个问题啊?急~!~!
  • 请问:我在redhat下装了bochs-2.2.1-1.rpm,.装了后,想设置一下,但找不到bochsrc.fda.bxrc,请问这个文件在哪个曰录下啊。
  • 请问:在配置Qt时,很多文档都说在.profile,.login里加东西,但是我好像没有发现有这两个文件上,请问这些文件在哪个目录下啊
  • 请问:在GCC里的C程序里的变量的声明是不是只能在前面,而且相同类型的变量的声明只能放在一起?如果不是,请问怎么样可以解决这个问题.
  • 请问各位大虾,小弟今天开始学jsp了,这学期我们有java课,所以已经下载了jdk(好象是1.2),请问我的98环境怎么配置jsp环境呀?我的jdk可以运行.java程序,别的我就不知道了....谢谢!


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3