Използване на 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 и shell скриптове, както вече сте (имайте предвид, че не трябва да оставяте 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 прави точно това. Можете да опитате да потърсите информация в уебсайта на проекта или да се свържете с Eloy Paris, автора на 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
Можете ли да предоставите пример за това как сте използвали във вашия c++ код @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 за предоставяне на подробности като брой пакети или размер на файла и т.н. (има скрипт, наречен capinfos в изходния код на wireshark, редактирайте го, ако искате повече функции)

Моля, имайте предвид, че добавките работят само в Linux и capinfos е написан в скрипт на обвивката. Така че можете да използвате едни и същи шел скриптове и да създавате нови скриптове за по-добра функционалност.

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

person sanchann    schedule 25.04.2012
comment
Не знам какво имате предвид под добавки, но плъгините и дори промените в източника на Wireshark работят добре на други UN*X и Windows, както например добавките на Lua. Освен това capinfos е написан на C; това не е shell скрипт. - person ; 18.01.2013
comment
здравей можеш ли да споделиш твоя опит? - person Arijit Mukherjee; 26.09.2014