2009-03-09 3 views
2

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

+0

В всей системе или только для вашего приложения? –

+0

Для всей системы, из всего, что происходит и выходит на определенном сетевом источнике (беспроводной, ethernet, эти вещи мне придется сначала проверить на использование). – Antro

+0

@Antro, вам нужен root-доступ для сканирования пакетов. Вы должны использовать такую ​​программу, как tcpdump или что-то в этом роде. – dreamlax

ответ

3

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

1

Решение cleaneast, вероятно, является 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 вары получает вас несколько сетевой статистикой, но они, кажется, не быть привязанными к определенному интерфейсу:

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 */ 
[..] 
Смежные вопросы