如何在应用程序内部监控网络活动?

10

我正在开发一个应用程序,想要监控我的 iPhone 上的网络活动。iOS是否支持类似 netstat 的命令或其他类似命令,可以告诉我哪些入站和出站连接是活动的?


我同意Deepak的观点,你唯一能做的就是监控蜂窝数据连接状态。这是苹果对你无法做什么的巨大影响力。 - theiOSDude
那么这个应用程序是如何工作的?http://itunes.apple.com/us/app/netstat/id400071873?mt=8 - VinnyD
确实非常有趣。http://itunes.apple.com/us/app/netstat/id400071873?mt=8 如何工作? - Maciej Swic
商店上有越来越多的应用程序可以做到这一点,我相信在阅读了这些问题之后,答案是在非常低的层面上:链接1 链接2 - Zebs
请查看我的问题,其中包含有答案的示例代码:https://dev59.com/82Ij5IYBdhLWcg3ws3Ff - Shrey
显示剩余2条评论
3个回答

11

经过一番搜索,我找到了用于 netstat 的苹果代码 Apple's code used for netstat

void protopr(uint32_t proto, char *name, int af) 函数中,您可以找到所需的全部内容。

我在设备上测试过 sysctlbyname("net.inet.tcp.pcblist_n",...) 是有效的。

这应该就是您所需要的全部信息了。


我在文档中找到了这段代码,看起来非常有前途。我相信他们使用 printf(" %7.7s[%1d] %7.7s[%1d]", "rxbytes", prioflag, "txbytes", prioflag); 进行计算和打印。但是我对 C 不是很熟悉,你知道如何解释 sysctlbyname 返回的数据吗? - Zebs
是的,我知道,但所有的内容都在我发布的苹果代码中。如果你想的话,明天我们可以聊一下,帮你解决这个问题。 - fbernardo
明天我非常希望能与您聊天,同时我将尽我所能从互联网代码中学到更多内容。在线上找到愿意助人的人真是太酷了! - Zebs
@Zebs 当我准备好时,我会在这些评论中邀请您加入聊天。 - fbernardo
让我们在聊天中继续这个讨论:http://chat.stackoverflow.com/rooms/8642/discussion-between-fbernardo-and-zebs - fbernardo
显示剩余2条评论

2

我无法进行测试,但据我了解,您需要使用sysctlsysctlnametomib结合使用,或者选择sysctlbyname来完成此操作:

sysctlbyname("net.inet.tcp.pcblist", ...)

和/或

sysctlbyname("net.inet.udp.pcblist", ...)

我已经尝试过并且可以调用该函数,但我不知道如何解释它所带回来的数据。问题是要查找输入和输出的千字节,你知道数据应该如何解释吗? - Zebs
@Zebs 这个问题没有提到任何 kbs,它提到了活动连接... 我无法自己测试,但我建议你查看 netstat 的源代码,这应该能让你很好地理解结果的解释方式... - Yahia
你说得完全正确,那就是我的问题,我以为它包含在“监视网络活动”中,但你说得对。我会深入了解netstat,以便弄清楚如何解释那些数据。 - Zebs

0

你可以使用Burp Suite来达到这个目的,通过它你可以检查所有通过手机的HTTP数据。

你需要在你的Mac/Ubuntu/Windows电脑上安装它,并且使用该工具创建一个代理服务器,然后修改你的iPhone/Android手机的Wifi设置,将你的电脑作为代理服务器,这样它就可以捕获所有的输入和输出流量。

点击此处阅读完整的说明 - http://www.engadget.com/2011/02/21/how-to-inspect-ioss-http-traffic-without-spending-a-dime/


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接