Использование libwireshark для программного получения функциональности Wireshark

Если я хочу написать скрипт, использующий функциональность Wireshark, я использую tshark. Я слышал, что есть также libwireshark, который можно использовать при написании программы на C, но, хоть убей, я не могу найти для него никакой документации! Пробовал изолировать код библиотеки в дереве исходников wireshark, но похоже код не очень хорошо организован и такой изоляции не существует (либо так, либо я не нашел).

У меня есть два вопроса:

  1. Прав ли я, думая, что libwireshark действительно можно использовать для программного получения любой функциональности, которую я могу получить от wireshark/tshark?
  2. Можете ли вы указать мне на любую документацию/учебники/примеры по этому вопросу? Даже несколько простых примеров могут иметь большое значение. В противном случае, можете ли вы указать мне на объяснение того, как я могу найти свой путь в дереве исходного кода wireshark?

person Elektito    schedule 25.04.2012    source источник
comment
То, что перед чем-то стоит lib, не обязательно означает, что оно подходит для массового потребления.   -  person Chris Eberle    schedule 25.04.2012
comment
Истинный. Значит, ты хочешь сказать, даже не думай об этом?   -  person Elektito    schedule 25.04.2012
comment
Нет, я хочу сказать, что это может быть плохо задокументировано... потому что это плохо задокументировано. Вы можете отправиться на неизведанную территорию. Если это того стоит для вас, тогда погрузитесь. Надеюсь, я ошибаюсь, я просто говорю, что не стал бы задерживать дыхание из-за хорошего урока или чего-то в этом роде.   -  person Chris Eberle    schedule 25.04.2012
comment
Я действительно не ожидал, что где-то будет скрываться обширная документация. Я довольно хорошо нахожу вещи в Интернете! Публикуя этот вопрос, я надеялся, что, возможно, где-то есть немного информации, которая может немного облегчить мою боль!   -  person Elektito    schedule 25.04.2012
comment
Ну, я надеюсь, что у кого-то здесь есть это для вас, бог знает, что у меня нет :)   -  person Chris Eberle    schedule 25.04.2012
comment
Что вы пытаетесь решить? Если C не является жестким ограничением, взгляните на Bro, Python/Ruby для сети.   -  person mavam    schedule 28.04.2012
comment
C не является жестким ограничением, но производительность (или, по крайней мере, может быть в будущем). Я сам предпочитаю Python всякий раз, когда могу его использовать, но в этом проекте он может быть менее привлекательным. И все же я хотел бы проверить это. Главное, чего я хочу добиться, — это извлечение голосовых потоков RTP. Сам Wireshark может это сделать (телефония/RTP/потоковой анализ...), но tshark, похоже, не может этого сделать. Как вы думаете, Бро может достичь этого? Кажется, я не могу найти много материалов, связанных с Python, на их веб-сайте.   -  person Elektito    schedule 28.04.2012


Ответы (4)


Нет

libwireshark не предназначен для использования вне самого Wireshark, и попытка сделать это оставит вас самостоятельно за попытку выяснить, что происходит не так. libwireshark фактически является частью анализатора пакетов Wireshark (называется epan для Ethereal packetanalyzer), который вы можете увидеть в Руководстве разработчика — это не весь Wireshark. Что на самом деле предоставляет libwireshark, так это основной интерфейс для всех встроенных диссекторов протоколов, хуки для плагинов-диссекторов и полный API для анализа пакетов. Он основан на механизме, установленном остальной частью Wireshark для вещей, которые не являются инструментами анализа пакетов напрямую, но позволяют анализаторам выполнять свою работу (например, выделять и освобождать фрагменты памяти, обрабатывать сжатые или зашифрованные данные и т. д.).

Вместо этого напишите диссектор.
Если ваш проект каким-то образом строго анализирует сетевой трафик, вы можете рассмотреть возможность написания диссектора для Wireshark, а не заново изобретать множество колес, которые Wireshark может предоставить вам. Если вам нужно сделать что-то более сложное, например, отслеживать сетевой трафик, а затем запускать другие задачи или отправлять данные самостоятельно, вам, вероятно, лучше использовать tshark и сценарии оболочки, как вы уже используете (имейте в виду, что вы не должны позволять tshark работать в любом случае очень долго).

Если вы действительно, действительно хотите использовать libwireshark напрямую, вам нужно каким-то образом решить все ее зависимости (желательно, сделав ее реальной автономной библиотекой) и предусмотреть предположения, которые она делает о Wireshark ( или tshark) на самом деле работает. Весь код libwireshark хорошо организован, просто он состоит из всего каталога epan под деревом исходников Wireshark и выложен в соответствии с соглашениями, установленными еще тогда, когда Wireshark еще был Ethereal. Документация для каждой функции предоставляется в файлах заголовков, когда она общедоступна, и в каждом случае более глубоко в исходных файлах. Также имейте в виду, что README .developer, распространяемый с имеющейся у вас версией исходного кода, — хорошее место, чтобы получить несколько советов (и вы также можете прочитать все файлы README.*, если хотите выполнить эту задачу).

person multipleinterfaces    schedule 27.04.2012
comment
Спасибо. Это многое объясняет и дает пищу для размышлений. Однако я не думаю, что смогу написать диссектора для этой работы. Мне нужно извлечь потоки rtp (помимо прочего), и я видел, что wireshark может перечислять потоки и даже извлекать из них аудиоданные. Тут не поможет не только написание диссектора, недостаточно даже одного запуска tshark. Лучшее, что я могу сделать, это запустить tshark и получить некоторые подсказки о потоках, а затем самостоятельно выполнить анализ пакетов и извлечение аудио. Можете ли вы придумать лучший подход? И почему я не должен запускать tshark очень долго? - person Elektito; 27.04.2012
comment
Wireshark (и tshark) исчерпает память после пока. Использование dumpcap напрямую лучше для длительных захватов, хотя вы правы : вам все равно нужно будет выполнить некоторую постобработку. Я сам мало что делал с rtp, но если вы спросите на сайте вопросов и ответов Wireshark, тот, кто знает больше об этом больше шансов увидеть его и, возможно, быть в состоянии помочь. - person multipleinterfaces; 27.04.2012
comment
Но dumpcap предназначен только для захвата пакетов, не так ли? Меня интересует wireshark только из-за его возможностей анализа. libpcap (и, следовательно, wireshark/tshark) не способен выдерживать нагрузки, над которыми я работаю. В любом случае, я думаю, что попробую более конкретный пример на сайте вопросов и ответов Wireshark и надеюсь, что кто-то может помочь. Спасибо еще раз. - person Elektito; 27.04.2012

Конечно, можно использовать libwireshark вне самого Wireshark, поскольку я знаю, что netexpect делает именно это. Вы можете попробовать поискать информацию на веб-сайте этого проекта или связаться с Элой Пэрис, автором netexpect, для получения дополнительной помощи/указателей.

person Christopher Maynard    schedule 06.09.2013
comment
привет можешь поделиться своим опытом? - person Arijit Mukherjee; 26.09.2014

Да! вы можете получить эту функциональность, используя libwireshark. я написал весь код, чтобы сделать то же самое. просто отлично работает.

person sanny.d    schedule 06.11.2012
comment
под кодом я имел в виду ... код, а не скрипты, используя libwireshark, я написал весь код C ++ для захвата и анализа сетевых пакетов!. - person ; 30.05.2013
comment
Можете ли вы привести пример того, как вы использовали в своем коде на С++ @sammy.d - person Debobroto Das; 14.07.2014
comment
привет можешь поделиться своим опытом? - person Arijit Mukherjee; 26.09.2014

Даже я написал скрипты для функционала wireshark в рамках своего проекта по автоматизации некоторых вещей.

Лучше всего использовать аддоны wireshark следующим образом:

  1. tshark, чтобы добавить файл pcap, применяя фильтр, но если вы обнаружите, что какая-либо функция отсутствует, просто отредактируйте tshark.c в исходном коде wireshark.
  2. capinfos для предоставления подробной информации, такой как количество пакетов или размер файла и т. д. (в исходном коде wireshark есть скрипт с именем capinfos, отредактируйте его, если вам нужны дополнительные функции)

Обратите внимание, что надстройки работают только в Linux, а capinfos написан в сценарии оболочки. Таким образом, вы можете использовать одни и те же сценарии оболочки и создавать новые сценарии для повышения функциональности.

Даже я столкнулся с большой проблемой изначально, так как нет надлежащей документации. Но как только вы начинаете, все идет гладко.

person sanchann    schedule 25.04.2012
comment
Я не знаю, что вы подразумеваете под надстройками, но надстройки и даже изменения в исходниках Wireshark прекрасно работают на других UN*X и на Windows, как, например, надстройки Lua. Кроме того, capinfos написан на C; это не сценарий оболочки. - person ; 18.01.2013
comment
привет можешь поделиться своим опытом? - person Arijit Mukherjee; 26.09.2014