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

怎么用代码去获得网卡 网桥的收发统计信息(packets 数量,tx ,rx字节数量)?谢谢

    来源: 互联网  发布时间:2016-04-27

    本文导语:  如题 | 一个笨方法,system(ifconfig > temp.txt), 然后解析temp.txt里的内容. | up | #include   #include  #include   #include   #include   #include   #include   #include   #include   #include...

如题

|
一个笨方法,system(ifconfig > temp.txt),
然后解析temp.txt里的内容.

|
up

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

#include 
#include 
#include 

#define MAXINTERFACES 16 

int main ( register int argc, register char *argv[] )

register int fd, intrface, retn = 0; 
struct ifreq buf[MAXINTERFACES]; 
struct arpreq arp; 
struct ifconf ifc; 

if ((fd = socket (AF_INET, SOCK_DGRAM, 0)) >= 0) 

ifc.ifc_len = sizeof buf; 
ifc.ifc_buf = (caddr_t) buf; 
if (!ioctl (fd, SIOCGIFCONF, (char *) &ifc)) 

intrface = ifc.ifc_len / sizeof (struct ifreq); 
printf("interface num is interface=%dnnn",intrface); 
while (intrface-- > 0) 

printf ("net device %sn", buf[intrface].ifr_name); 

/*Jugde whether the net card status is promisc*/ 
if (!(ioctl (fd, SIOCGIFFLAGS, (char *) &buf[intrface]))) 

if (buf[intrface].ifr_flags & IFF_PROMISC) 

puts ("the interface is PROMISC"); 
retn++; 


else 

char str[256]; 

sprintf (str, "cpm: ioctl device %s", buf[intrface].ifr_name); 
perror (str); 


/*Jugde whether the net card status is up*/ 
if (buf[intrface].ifr_flags & IFF_UP) 

puts("the interface status is UP"); 

else 

puts("the interface status is DOWN"); 


/*Get IP of the net card */ 
if (!(ioctl (fd, SIOCGIFADDR, (char *) &buf[intrface]))) 

puts ("IP address is:"); 
puts(inet_ntoa(((struct sockaddr_in*)(&buf[intrface].ifr_addr))->sin_addr)); 
puts(""); 
//puts (buf[intrface].ifr_addr.sa_data); 

else 

char str[256]; 

sprintf (str, "cpm: ioctl device %s", buf[intrface].ifr_name); 
perror (str); 


/*Get HW ADDRESS of the net card */ 
if (!(ioctl (fd, SIOCGIFHWADDR, (char *) &buf[intrface]))) 

puts ("HW address is:"); 

printf("%02x:%02x:%02x:%02x:%02x:%02xn", 
(unsigned char)buf[intrface].ifr_hwaddr.sa_data[0], 
(unsigned char)buf[intrface].ifr_hwaddr.sa_data[1], 
(unsigned char)buf[intrface].ifr_hwaddr.sa_data[2], 
(unsigned char)buf[intrface].ifr_hwaddr.sa_data[3], 
(unsigned char)buf[intrface].ifr_hwaddr.sa_data[4], 
(unsigned char)buf[intrface].ifr_hwaddr.sa_data[5]); 

puts(""); 
puts(""); 

else 

char str[256]; 

sprintf (str, "cpm: ioctl device %s", buf[intrface].ifr_name); 
perror (str); 



else 
{
perror ("cpm: ioctl"); 
}


else

perror ("cpm: socket"); 
}

close (fd); 
return retn; 
}

|

#include  
#include 
#include  
#include  
#include  
#include  
#include  
#include  
#include  
#include 
#include 
#include 
#include 

#include 
#include 
#include 

#define MAXINTERFACES 16 

int main ( register int argc, register char *argv[] )

register int fd, intrface, retn = 0; 
struct ifreq buf[MAXINTERFACES]; 
struct arpreq arp; 
struct ifconf ifc; 

if ((fd = socket (AF_INET, SOCK_DGRAM, 0)) >= 0) 

ifc.ifc_len = sizeof buf; 
ifc.ifc_buf = (caddr_t) buf; 
if (!ioctl (fd, SIOCGIFCONF, (char *) &ifc)) 

intrface = ifc.ifc_len / sizeof (struct ifreq); 
printf("interface num is interface=%dnnn",intrface); 
while (intrface-- > 0) 

printf ("net device %sn", buf[intrface].ifr_name); 

/*Jugde whether the net card status is promisc*/ 
if (!(ioctl (fd, SIOCGIFFLAGS, (char *) &buf[intrface]))) 

if (buf[intrface].ifr_flags & IFF_PROMISC) 

puts ("the interface is PROMISC"); 
retn++; 


else 

char str[256]; 

sprintf (str, "cpm: ioctl device %s", buf[intrface].ifr_name); 
perror (str); 


/*Jugde whether the net card status is up*/ 
if (buf[intrface].ifr_flags & IFF_UP) 

puts("the interface status is UP"); 

else 

puts("the interface status is DOWN"); 


/*Get IP of the net card */ 
if (!(ioctl (fd, SIOCGIFADDR, (char *) &buf[intrface]))) 

puts ("IP address is:"); 
puts(inet_ntoa(((struct sockaddr_in*)(&buf[intrface].ifr_addr))->sin_addr)); 
puts(""); 
//puts (buf[intrface].ifr_addr.sa_data); 

else 

char str[256]; 

sprintf (str, "cpm: ioctl device %s", buf[intrface].ifr_name); 
perror (str); 


/*Get HW ADDRESS of the net card */ 
if (!(ioctl (fd, SIOCGIFHWADDR, (char *) &buf[intrface]))) 

puts ("HW address is:"); 

printf("%02x:%02x:%02x:%02x:%02x:%02xn", 
(unsigned char)buf[intrface].ifr_hwaddr.sa_data[0], 
(unsigned char)buf[intrface].ifr_hwaddr.sa_data[1], 
(unsigned char)buf[intrface].ifr_hwaddr.sa_data[2], 
(unsigned char)buf[intrface].ifr_hwaddr.sa_data[3], 
(unsigned char)buf[intrface].ifr_hwaddr.sa_data[4], 
(unsigned char)buf[intrface].ifr_hwaddr.sa_data[5]); 

puts(""); 
puts(""); 

else 

char str[256]; 

sprintf (str, "cpm: ioctl device %s", buf[intrface].ifr_name); 
perror (str); 



else 
{
perror ("cpm: ioctl"); 
}


else

perror ("cpm: socket"); 
}

close (fd); 
return retn; 
}

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 正则表达式匹配中文与双字节的代码
  • 关于《GNU Emacs Lisp编程入门》这本书里所说的“字节编译代码”是什么东东?
  • vbs:一段比较精简的代码实现取得字符串的"字节"数
  • 从字符串中截取等长字节的Java代码
  • Linux控制台下作图,哪怕是画一条直线,谁有c++/c代码?(0字节)
  • Java 按照字节来截取字符串的代码(不会出现半个汉字)
  • c#获取字符串宽度的示例代码(字节数方法)
  • [js]用JAVASCRIPT正则表达式限制文本字节数的代码
  • openssl 编程中制作证书,宽字节码的一个问题(附代码)
  • Javascript 字符串字节长度计算函数代码与效率分析(for VS 正则)
  • 谁能给出如何读出软盘第一个扇区和第二个扇区的全部字节的代码?
  • javascript 添加到收藏夹和书签代码示例
  • 在JBuilder中,为什么编写的代码中,当代码出现关键字时,后面的部分代码就移位了,当在有关键字的那些代码行进行选择时,也会出现鼠标位
  • Python GUI编程:tkinter实现一个窗口并居中代码
  • 为什么两行代码间不加入其他代码就崩溃,而加入了日志代码后就不崩溃?
  • JSP中清空cookie代码参考
  • 在ubuntu8.10 新立得中安装anjuta,为什么没有代码提示功能,怎么做才有,还有自动代码补全和代码提示有什么区别,
  • Python获取网页编码的方法及示例代码
  • 到底怎么样的代码算是有效代码?请教了。。
  • HTML网页中的html body onload自动跳转方法介绍及自动跳转代码示例
  • 如果要研究源代码以提高自己,哪一个开放源代码的软件比较合适?
  • php通过socket_bind()设置IP地址代码示例
  • linux源代码的时间函数源代码
  • boost库lexical_cast不同用法代码参考
  • gdb的时候代码 next显示的代码乱了
  • 通过javascript库JQuery实现页面跳转功能代码
  • 源代码!源代码!
  • 使用libpcap读取tcpdump抓取的文件并解析c代码实例
  • 哪位会使用代码保护工具WingGuard来保护java代码?
  • HTML网页的Meta Refresh自动跳转方法介绍及Meta Refresh自动跳转代码示例
  • 如何得到C语言代码对应的汇编代码?


  • 站内导航:


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

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

    浙ICP备11055608号-3