以编程方式获取OS X中给定进程接收/发送的字节数?

时间:2013-10-23 11:31:12

标签: objective-c macos process kernel pid

如何以编程方式获取OS X中给定进程接收和发送的字节数?

如何解决以下问题?

2 个答案:

答案 0 :(得分:8)

这并不容易,但它可行:通过在未记录的" com.apple.network.statistics"上注册系统套接字(PF_SYSTEM),您可以获得流程统计。问题是,它只是从注册的角度来看 - 也就是说你不知道在套接字启动之前有多少rx / tx。

此处没有用户模式标题,但您可以在该网站上使用lsock.h,也可以从xnu自己的源中删除定义(qv xnu-2422.1.72 / bsd /净/ ntstat.h)。相关部分是:

,NSTAT_MSG_TYPE_SRC_COUNTS              = 10004
    typedef struct nstat_counts
    {
            /* Counters */
            u_int64_t       nstat_rxpackets __attribute__((aligned(8)));
            u_int64_t       nstat_rxbytes   __attribute__((aligned(8)));
            u_int64_t       nstat_txpackets __attribute__((aligned(8)));
            u_int64_t       nstat_txbytes   __attribute__((aligned(8)));

            u_int32_t       nstat_rxduplicatebytes;
            u_int32_t       nstat_rxoutoforderbytes;
            u_int32_t       nstat_txretransmit;

            u_int32_t       nstat_connectattempts;
            u_int32_t       nstat_connectsuccesses;

            u_int32_t       nstat_min_rtt;
            u_int32_t       nstat_avg_rtt;
            u_int32_t       nstat_var_rtt;
    } nstat_counts;

typedef struct nstat_msg_src_counts
{
        nstat_msg_hdr           hdr;
        nstat_src_ref_t         srcref;
        nstat_counts            counts;
} nstat_msg_src_counts

顺便提一下,这也是ActivityMonitor在"网络"中的10.9。查看,因此几乎是唯一导出的编程API。 "流程资源管理器"该站点中的工具也以相同的方式提供每个进程的统计信息。

答案 1 :(得分:-3)

我调查了以上观点并开发/更新了这样做的工具:https://github.com/sotrosh/lsock