读取接收和发送的网络流量字节

时间:2009-03-09 16:36:42

标签: objective-c xcode macos

在Objective-C中获取网络流量发送和接收字节的最简单方法是什么?

2 个答案:

答案 0 :(得分:3)

这并不容易,它来自C而不是Objective-C,但您需要的所有信息都存储在 getifaddrs(3)返回给您的接口地址的ifa_data字段中。您可以在libtop_p_networks_sample函数的source code到'top'实用程序中查看如何访问它的示例。

答案 1 :(得分:1)

cleaneast解决方案可能是cdespinosa的。

替代可能是

1 /在NSTask中包含netstat调用

diciu$ netstat -bi en0
Name  Mtu   Network       Address            Ipkts Ierrs     Ibytes    Opkts Oerrs     Obytes  Coll
en0   1500  <Link#4>    xx:xx:xx:xx:xx    86259     0   86175096    64485     0   10090152     0

2 /读取sysctl变量可以获得一些网络统计信息,但这些似乎与特定接口无关:

diciu$ sysctl -b net.inet.ip.stats > /tmp/tt
diciu$ hexdump /tmp/tt
0000000 d2 4a 01 00 00 00 00 00 00 00 00 00 00 00 00 00
0000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

在转储中“d2 4a 01 00”是总ip包(即0x14ad2 = 84690包)。

您获得的结构在netinet / ip_var.h中定义:

struct  ipstat {
        u_int32_t       ips_total;              /* total packets received */
[..]