LINUX.ORG.RU

Нужен вывод только уникалных строк из инпута


0

1

Идея такая. Есть комп, который шлюз, через него идёт трафик на определенном интерфейсе. я запускаю tcpdump, который ловит пакеты по определденным правилам. Но мне нужно знать только сами айпишники, от которых были соединения. Одного упоминания будет достаточно. Какая прога мне подойдет для того, чтобы выводимое tcpdumpom фильтровалось по принципу «если я это уже 1 раз видел хоть когда нибудь, то я это впредь игнорирую (то есть не вывожу больше в аутпут)»?

sort -u и uniq -u либо лыжи не едут либо я какой то не такой - повторы печатаются.

Ответ на: комментарий от unanimous

я хочу чтобы это происходило прямо на ходу, а не сначала создавать многогигабайтный файл tcpdumpa, а уже потом его обрабатывать. По какому признаку можно отсортировать тогда?

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

Я не в курсе спец инструментов, но видимо придется велосипедить. Что-то вроде: сохраняем вывод в файл, когда он становится больше, скажем 1 Гб, файл закрываем и начинаем писать в новый. А старый сортируем с удалением повторов вкупе с уже имеющимся протоколом с удаленными повторениями.

unanimous ★★★★★
()

твоя ошибка в попытке получить сразу точный ответ.

создавай маленькие(за 1-2 минуты) дампы, получай из них уникальные апишники, и результат добавляй не сортируя в датабазу. следующая сортировка только при просмотре.

ckotinko ☆☆☆
()

если я это уже 1 раз видел хоть когда нибудь, то я это впредь игнорирую (то есть не вывожу больше в аутпут)»?

Смотреть перед печатью есть ли в хэше IP если нет, то загонять IP в хеш и печатать IP в stdout

пусть нужный IP идет седьмым полем в выводе tcpdump'a, тогда
tcpdump ... | awk 'hash[$7] == 0 {hash[$7]=1; print $7}'
anonymous
()
Ответ на: комментарий от justin_case

http://pastebin.com/27x9x79D Вот немного расширенный вариант. Осталось только регулярочку поменять с просто число на ip.

anonymous
()

Есть возможность вмешаться в iptables? Может удобнее будет попробовать сделать отдельную цепочку для регистрации ip адресов по нужным критериям через

iptables -m recent --set
и посмотреть результат через
cat /proc/net/xt_recent/имя
Подробное описание с примерами здесь.

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