如何在linuxMac OSX中获取网络适配器统计信息?

如何在linuxMac OSX中获取网络适配器统计信息?,第1张

概述我正在寻找一种方法来获取 Linux和MacOSX上的C网络统计数据.具体来说,我需要监控从系统上的每个网络适配器上传和下载的字节数 – 我不需要进行数据包检查,也不需要区分协议,只需要一个’总字节’计数器,我可以间隔轮询没事的.在Windows中,我可以使用iphlpapi.dll库通过GetIfTable(列出网络适配器)和GetIfEntry(读取统计信息),但我找不到Linux / OSX 我正在寻找一种方法来获取 Linux和MacOSX上的C网络统计数据.具体来说,我需要监控从系统上的每个网络适配器上传和下载的字节数 – 我不需要进行数据包检查,也不需要区分协议,只需要一个’总字节’计数器,我可以间隔轮询没事的.在windows中,我可以使用iphlpAPI.dll库通过GetIftable(列出网络适配器)和GetIfEntry(读取统计信息),但我找不到linux / OSX等价物.我对C的了解非常基础,所以我很欣赏一个不太复杂的解决方案.任何帮助将非常感激!解决方法 Darwin netstat源代码使用sysctl.
这里有一些代码可以打印OSX上的输入和输出字节数:
#import <Foundation/Foundation.h>#include <sys/sysctl.h>#include <netinet/in.h>#include <net/if.h>#include <net/route.h>int main (int argc,const char * argv[]) {    NSautoreleasePool * pool = [[NSautoreleasePool alloc] init];    int mib[] = {        CTL_NET,PF_ROUTE,NET_RT_IFList2,0    };    size_t len;    if (sysctl(mib,6,NulL,&len,0) < 0) {        fprintf(stderr,"sysctl: %s\n",strerror(errno));        exit(1);    }    char *buf = (char *)malloc(len);    if (sysctl(mib,buf,strerror(errno));        exit(1);    }    char *lim = buf + len;    char *next = NulL;    u_int64_t totalibytes = 0;    u_int64_t totalobytes = 0;    for (next = buf; next < lim; ) {        struct if_msghdr *ifm = (struct if_msghdr *)next;        next += ifm->ifm_msglen;        if (ifm->ifm_type == RTM_IFINFO2) {            struct if_msghdr2 *if2m = (struct if_msghdr2 *)ifm;            totalibytes += if2m->ifm_data.ifi_ibytes;            totalobytes += if2m->ifm_data.ifi_obytes;        }    }    printf("total ibytes %qu\tobytes %qu\n",totalibytes,totalobytes);    [pool drain];    return 0;}
总结

以上是内存溢出为你收集整理的如何在linux / Mac OSX中获取网络适配器统计信息?全部内容,希望文章能够帮你解决如何在linux / Mac OSX中获取网络适配器统计信息?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/1036474.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存