2014-12-03 3 views
2

Я работаю над извлечением http-данных из файла pcap. Мне нужно собрать фрагмент, поэтому я нахожу nids lib. Я устанавливаю libnids 1.24 с homebrew в Mac os 10.9.5 64 бит.tcp_callback никогда не вызывался в образце libnids

Я пытаюсь запустить printall sample. Я немного изменил код в соответствии с моей средой, например, изменив «nids.h», добавив nids_params.filename = имя_файла; для открытия автономного файла для анализа.

Образец в состоянии начать. Но проблема в том, что он ничего не печатает.

Я добавляю печать к первой строке функции tcp_callback. Опять же, ничего. Это указывает, что обратный вызов никогда не вызывается.

Для доказательства проблемы не relatted с моей крышкой файл

  • Я установил его, чтобы захватить живой пакет. После того, как я открою веб-страницу, я ничего не получаю.
  • Я разбираю файл pcap с помощью libpcap и получаю много пакета tcp.
  • Число пакетов 70k +. Маловероятно, что с рукопожатием не существует целого tcp-соединения.

Это такая боль, чтобы скомпилировать libnids с образцом и отлаживать шаг за шагом. Так вы можете дать мне некоторую информацию о том, почему callback не вызван?

ответ

1

Поскольку никто не ответил мне :(Я должен выбрать наиболее болезненный путь: собрать libnids, а затем шаг за шагом отладки, чтобы увидеть WTF происходит

Я пытаюсь отключить -O2 опции компиляции

.. .

и увидеть, где ТСР обратного вызова следует называть я считаю, что два факта:

  • контрольная сумма некоторых пакетов неправильно
  • это просто найти поток TCP и добавить новое соединение из-за ACKs. не видно ,

первый подтвержден wirehark. И я вижу, что wirehark меня не устраивает, что tcp checksum offload. Я получаю от объяснений вики из Wireshark:

Большинство современных операционных систем поддерживают некоторую форму сети разгрузку, где некоторая обработка сети происходит на NIC вместо CPU. Обычно это замечательная вещь. Он может высвободить ресурсы в остальном системы и позволить ему обрабатывать больше соединений. Если вы пытаетесь загрузить трафик , это может привести к ложным ошибкам и странным или даже недостающим трафиком. Checksum Offload В системах, поддерживающих выгрузку контрольной суммы, контрольные суммы IP, TCP и UDP рассчитываются на сетевом адаптере непосредственно перед их передачей по проводнику . В Wireshark они отображаются как исходящие пакеты, отмеченные черным с красным текстом и запиской [неверно, должно быть xxxx (возможно, вызвано «выгрузка контрольной суммы TCP»?)].

Вторая причина заключается в том, что libnids может собирать поток посредством сообщения для встряхивания руки.

Внезапно мне приходит в голову мысль, что объединение этих двух фактов приводит к тому, что результат не выводит ничего.

Поскольку большинство пакетов ACK имеют неправильную контрольную сумму. Таким образом, пакет пропускается до того, как его можно увидеть функцией повторной сборки.

После отключения контрольной суммы я, наконец, получаю вывод полезной нагрузки tcp. Два дня, и я понял!