LINUX.ORG.RU

Программа для наблюдения за сетевой активностью


0

0

Долго искал аналог, но так и не нашел. Пришлось писать самому 8) небольшой демон, который просматривает сетевой трафик проходящий через интерфейс (используется libpcap с возможностью указания фильтров), пытается выяснить что за программа(ы) и какой пользователь этот траффик породил (вот именно этой особенности я нигде и не нашел, из-за нее все и затевалось), пишет эту информацию в лог. Логом может быть все что угодно. Я использовал MySQL, но сделал поддержку плагинов, так что теоретически можно писать куда угодно, есть еще отладочный плагин для дампа в текстовый файл. Есть поддержка ipv6, но за неимением оного не тестировалась. Рассматривает связку 2х ip и 2х портов (в tcp и udp естественно) как логическое соединение (конечно с таймаутом).

В результате можно узнать что пользователь с uid=1000 слил за ночь 25 гигов с помощью wget и lftp.

Вообщем если кому-то нужно - http://stream.ifolder.ru/5146077 . Если будет желание можно и на сорц форж залить. Но ради себя одного это делать лень.

★★★★

эээ... в смысле наблюдать трафик, который идёт с локальной машины во вне от имени каких пользователей?

// wbr

klalafuda ★☆☆
()
Ответ на: комментарий от klalafuda

Ну да. вообще-то весь трафик. Но имя пользователей и программы только для трафика порожденного локально. МНе больше и надо было =)

OxiD ★★★★
() автор топика
Ответ на: комментарий от OxiD

О, фак, в архиве нет никакой доки к этому делу 8( Если кому-то будет нужно напишу небольшую инструкцию ;)

OxiD ★★★★
() автор топика

А ты залей, не поленись. Оно вроде бы ничего революционного,
но зачем свой велосипед каждому делать? Залей сделай милость.
Предчуствую ибо чтосейчас не нужно, но потом понадобится.

Svoloch ★★★
()
Ответ на: комментарий от BreadFan

Что-то умеет:

# /sbin/iptables -I OUTPUT -j LOG --log-uid

kernel: IN= OUT=ppp0 SRC=1.2.3.4 DST=99.225.203.192 LEN=1492 TOS=0x08 PREC=0x00 TTL=64 ID=36816 DF PROTO=TCP SPT=4662 DPT=1183 WINDOW=5808 RES=0x00 ACK URGP=0 UID=1003

Вот вам UID=1003 (mldonkey)

Да и счетчики по --uid-owner добавить для сбора трафика

sdio ★★★★★
()
Ответ на: комментарий от BreadFan

Ну можно конечно запускать каждую прогу под отдельным uid, я так понимаю что iptables может логгировать только его?

И еще - на FreeBSD так сделать не получиться. (-8

Хотя оно конечно R.I.P

OxiD ★★★★
() автор топика
Ответ на: комментарий от OxiD

либо я не понял вопроса, либо одно из двух :)

# /sbin/iptables -I OUTPUT -j LOG --log-uid

будет логировать uid всех локально порождаемых пакетов

BreadFan ★★
()
Ответ на: комментарий от BreadFan

Ну да. Но как отследить что это за процесс? Скажем запустилось нечто, что соединилось через 21 порт с удаленным компьютером. Но действительно ли это фтп клиент?

Или скажем у клиента есть много php скпиптов которые что-то качают по ночам. Нужно узнать какой из них что качал. uid у всех будет одинаковый.

OxiD ★★★★
() автор топика
Ответ на: комментарий от BreadFan

Может в patch-o-matic такое есть. =) Но я не видел/ не нашел.

OxiD ★★★★
() автор топика
Ответ на: комментарий от BreadFan

Мне почему-то кажется что на уровне на котором работает iptables в ядре, достаточно сложно привязать сокет к конкретному процессу, тем более к его inode на диске.

OxiD ★★★★
() автор топика
Ответ на: комментарий от OxiD

> Мне почему-то кажется что на уровне на котором работает iptables в ядре, достаточно сложно привязать сокет к конкретному процессу, тем более к его inode на диске.

как раз на уровне ядра привязать файловый дескриптор к процессу - нет ничего проще (он как бы уже привязан) да и имя исполняемого взять из task_struct->comm или найти inode образа не сложно.

// wbr

klalafuda ★☆☆
()
Ответ на: комментарий от klalafuda

Но на уровне userspace нормального апи для этого нет почему-то 8(

OxiD ★★★★
() автор топика
Ответ на: комментарий от sdio

О обратные пакеты все приходят без UID, как статистику считать будем?

Автору - молодец - выкладывай - вещь!

birdie ★★★★★
()
Ответ на: комментарий от klalafuda

> IMHO пока что несколько рановато :)

ибо

...дикое форматирование и смесь табуляции и пробелов, отсутствие комментариев а те, что есть - мало того, что на русском, так ещё и в UTF8, ошибки, возвращаемые системой, иногда не проверяются, фиксированные пути в коде, изобретение велосипеда в spin_lock() поверх мьютекса, в то время как есть условные переменные, зачем громоздить таймер на сигналах, если все равно используются потоки?, зачем нужен свой strptime()?, зачем делать разнесённые SELECT-check-UPDATE со всеми вытекающими, когда есть INSERT...ON DUPLICATE KEY UPDATE..? отсутствие autotools или аналога ну и прочее.

ну а так да, забавно :)

// wbr

klalafuda ★☆☆
()
Ответ на: комментарий от klalafuda

Все это учту, спасибо за указанияю. просто изначально для себя делалось, а с mysql знаком.. ну кароче как написал, так и знаком =)

OxiD ★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.