Чтение байтов сетевого трафика, полученных и отправленных - PullRequest
2 голосов
/ 09 марта 2009

Какой самый простой способ получить отправленный и полученный байты сетевого трафика в Objective-C?

Ответы [ 2 ]

3 голосов
/ 10 марта 2009

Это не просто, и это из C, а не из Objective-C, но вся необходимая информация хранится в поле ifa_data адресов интерфейсов, возвращаемых вам getifaddrs (3) . Вы можете увидеть один пример того, как получить доступ к этому в исходном коде для утилиты top, в функции libtop_p_networks_sample.

1 голос
/ 10 марта 2009

Самым чистым решением, вероятно, является cdespinosa.

Альтернативы могут быть

1 / Завершение вызова netstat внутри NSTask

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 vars дает вам некоторую сетевую статистику, но, похоже, она не привязана к конкретному интерфейсу:

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 */
[..]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...