Начальство дало мне ЦУ посмотреть разные системы подсчета трафика, которые можно использовать под 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! Ну ладно, я же для пользы дела.