Поддержка Консалтинг Обучение Jamf Pro Блог

Подсчет трафика на Mac OS X. Подход 1

Наташа Персиянова 31.08.2010


Начальство дало мне ЦУ посмотреть разные системы подсчета трафика, которые можно использовать под Mac OS X.
В форме – “А, ну-ка, поставь на досуге на Мак и сравни достижения народного хозяйства FreeBSD и Linux (ipcad, trafd, netams, ntop, просто набор скриптов для ipfw и вообще, сама ищи!)”.

Сперва я посмотрела trafd. Вряд ли буду рекомендовать именно его, но вдруг у кого-то возникнут проблемы с компилированием trafd под Mac OS X (ниже).

Итак, trafd – набор утилит для сбора трафика и просмотра информации о нем.
Демон trafd, использующий bpf, собирает статистику в файл, который можно просмотреть командой traflog.
Проект как-то развивается – “Apr 8 2008 — trafd-3.0.3-b7 released”.

Собираем trafd
Скачаем пакет на Mac OS X (в портах нет; curl, tar) и попробуем собрать:

make -f Makefile.linux all

interfaces.c:35:26: error: net/ppp_defs.h: No such file or directory
interfaces.c: In function 'ppp_if_print':
interfaces.c:150: error: 'PPP_HDRLEN' undeclared (first use in this function)
interfaces.c:150: error: (Each undeclared identifier is reported only once
interfaces.c:150: error: for each function it appears in.)
interfaces.c:164: warning: implicit declaration of function 'PPP_PROTOCOL'
interfaces.c:164: error: 'PPP_IP' undeclared (first use in this function)

и т.д. и т.п.

Сдается мне, нет у нас нужного файла заголовков (/usr/include/net/ppp_defs.h).
Загуглим его (на всякий пожарный, на сайте Apple – google: ppp_defs.h site:opensource.apple.com) и отважно бросим в /usr/include/net.

make -f Makefile.linux all install install-misc

О! Чудо произошло (все собралось), но неполностью (ничего не установилось, так как Makefile пытается использовать несуществующую в Mac OS X команду useradd для создания пользователя и группы trafd).
Хорошо, удалим из Makefile.linux кусочек про создание пользователя (install-createuser) и укажем в нем

TRAFD_USER=root
TRAFD_GROUP=wheel

Я же пока лишь тестирую систему, пускай запускается от суперпользовательницы root.

Итак, make -f Makefile.linux all install install-misc.
Все установилось!

ls /usr/local/bin/
trafctl    trafdb    traflog    trafsave  trafstart  trafstatd
trafd    trafdump  trafrev    trafslice  trafstat  trafstop

Запускаем trafd, указывая используемый интерфейс.

/usr/local/bin/trafd -i en0

Пьем кофе, качаем видео.

Сбрасываем статистику
trafd хранит статистику в памяти, ее сбрасывают в файл, вызывая программу trafsafe, с помощью cron. Я пока воспользуюсь ручками, питая надежду, при необходимости написать launchd daemon (к этому нас всех принуждает наш технический директор).

/usr/local/bin/trafsave en0

Просматриваем статистику

/usr/local/bin/traflog -i en0

(en0) persix.playground.shortcut.ru at Aug 31 22:07:47 - Aug 31 22:11:36
 Summary: 24981925 data bytes, 26707845 all bytes, 495 records
     From           Port         To            Port  Proto     Data       All
persix      client  central.crashplan. https   tcp   13537021   14131953
nevaeh.sto.spotify 4070    persix      client  tcp    9560520    9907984

traflog понимает кучу запросов (покажи трафик от такой-то машины к такой-то по таким-то портам)
Ага, я что-то заливаю на crashplan и скачиваю со spotify.

Подождем еще немного, посмотрим аккумулированный трафик (я запускала trafsave насколько раз)

traflog -i /var/trafd/trafd.en0 -s

Да, считает, конечно не бегло……………………………

 (/var/trafd/trafd.en0)  persix.playground.shortcut.ru at Aug 31 21:56:39 - Aug 31 23:02:37
 Summary: 215558820 data bytes, 233901168 all bytes, 2890 records
     From           Port         To            Port  Proto     Data       All
nevaeh.sto.spotify 4070    persix      client  tcp   82480522   85483794
persix      client  central.crashplan. https   tcp   62023629   64581941
ew-in-f109.1e100.n imaps   persix      client  tcp   15731666   16907374
ew-in-f102.1e100.n https   persix      client  tcp    5616210    6532994

Ого, за час 215 MB! Ну ладно, я же для пользы дела.