2010-10-25 2 views
3

Я писал простой инструмент сниффера. Я начал с libpcap, но потом понял, что было бы полезно отслеживать информацию о потоке TCP, поэтому я начал читать и экспериментировать с libnids.Захват и сборка потоков TCP с помощью libnids

Это отличный инструмент, однако он не создает новую запись во внутренней хэш-таблице потоков, если это не свидетельствует о рукопожатии TCP (SYN, SYN/ACK, ACK) определенного потока. В результате я не смог бы увидеть много данных, если бы я не начал сниффер до того, как произойдет рукопожатие. Документации немного не хватает. Кто-нибудь знает, можно ли обойти это ограничение?

+0

Hi Caleb, Im, использующий pynids для захвата потоков из pcaps и сетевого трафика. Я столкнулся с ситуацией, когда pynids/libnids не видит tcp-потоки для pcaps, содержащих половину открытых потоков. Я предполагал, что это было зафиксировано в libnids 1.21, но, видимо, нет. http://bugs.debian.org/cgi-bin/bugreport.cgi?msg=21;bug=420129 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=284937 Can пожалуйста, уточните, как tcpkill соединение, если tcp callback никогда не запускается? – fimz

+0

Hi fimz, FYI Я думаю, что Stack Overflow поощряет задавать новый вопрос, а не это. Обратный вызов TCP будет вызван только в том случае, если.) Было обнаружено рукопожатие TCP.) Данные были отправлены по TCP-соединению, которое вы указали для отслеживания в (a) или c.) TCP-соединение закрыто, которое вы указали для отслеживания в). Я обнаружил, что вы можете использовать tcpkill, чтобы разорвать соединения, которые вы хотите, чтобы libnids забирали - поэтому, если вы знаете, какое соединение вы хотите убить, настройте tcpkill, чтобы его убить, и соединение должно перезаписать, и с этого момента NIDS выберет это вверх. Я использовал tcpkill, включенный в dsniff –

+1

, и на самом деле, последние libnids поставляются с действительно хорошим патчем, который позволяет отслеживать неустановленные TCP-соединения. Вы должны применить его и скомпилировать его самостоятельно. Я думаю, это было бы лучшим решением –

ответ

3

Хорошо, поэтому после некоторого глубокого поиска в Интернете, я думаю, что понял это, для всех, кто может быть заинтересован.

libnids был разработан для эмуляции сетевого стека ядра Linux, поэтому, глядя на него с этой точки зрения, для него не было бы смысла создавать таблицы для трафика, который не был рукопожарен. Единственное решение - использовать что-то вроде tcpkill, чтобы заставить новое рукопожатие.