我搜索了这个主题,但发现很少有帮助的细节.有了这些细节,我试着按如下方式编写一些代码.
注意:请将此帖中分享的详细信息与其他帖子进行比较,然后再将其标记为DUPLICATE,而不仅仅是主题.
- (NSArray *)getDataCountersForType:(int)type {
BOOL success;
struct ifaddrs *addrs = nil;
const struct ifaddrs *cursor = nil;
const struct sockaddr_dl *dlAddr = nil;
const struct if_data *networkStatisc = nil;
int dataSent = 0;
int dataReceived = 0;
success = getifaddrs(&addrs) == 0;
if (success) {
cursor = addrs;
while (cursor != NULL) {
if (cursor->ifa_addr->sa_family == AF_LINK) {
dlAddr = (const struct sockaddr_dl *) cursor->ifa_addr;
networkStatisc = (const struct if_data *) cursor->ifa_data;
if (type == WiFi) {
dataSent …Run Code Online (Sandbox Code Playgroud) 我已经工作了5天,试图在iPhone上学习和实现网络监视器.我查看了来自苹果的netstat代码,我失去了25%的头发.
我找到了JB Devices的链接,但我需要它在非JB设备上执行.(无论Apple是否在App商店接受它).
我发现了一些有用的链接:
如何在iPhone上获取tcp udp开放端口列表(我无法解析此问题中返回的数据:()
sysctlbyname buf返回类型(我不是网络人......不能理解这一个,可能是你们可以帮助:))
我可以说我从第一个链接得到了一些东西.你能帮我解析数据吗?有没有其他方法来实现这一目标?
我正在开发一个监控网络使用情况的应用.但是我注意到许多方法都不允许排除本地流量(例如,Time Machine).
我正在寻找一种排除本地流量的方法,并且只监控直接进出互联网的使用情况.
更新:感谢您的回复,现在我知道如何查找流量是否为本地流量,但我仍然不知道如何计算总输入/输出字节(对不起,如果我之前没有详细说明).我无法知道在特定时间段内或自OS启动以来在本地(或互联网)发送/接收的字节数.当OS运行时启动或终止事实过程会使这个问题进一步复杂化.
如何在linux/Mac OSX中获取网络适配器统计信息的答案?提供了一种总结总使用量的有趣方法,但它没有用,因为它总结的用法是接口统计.
更新2:我已经发布了我的最终解决方案.请向下滚动一下以查看.
我正在寻找一种方法来获取Linux和MacOSX上的C网络统计数据.具体来说,我需要监控从系统上的每个网络适配器上传和下载的字节数 - 我不需要进行数据包检查,也不需要区分协议,只需要一个'总字节'计数器,我可以间隔轮询没事的.在Windows中,我可以使用iphlpapi.dll库通过GetIfTable(列出网络适配器)和GetIfEntry(读取统计信息),但我找不到Linux/OSX等价物.我对C的了解非常基础,所以我很欣赏一个不太复杂的解决方案.任何帮助将非常感激!
ios ×2
iphone ×2
networking ×2
api ×1
c ×1
cocoa ×1
ipad ×1
linux ×1
macos ×1
monitoring ×1
netstat ×1
objective-c ×1
sockets ×1
sysctl ×1
tcp ×1