Анализатор трафика

  • Автор темы S-haman
  • Дата начала
S

S-haman

Гость
#1
Здроавствуйте мне необходимо написать прогармму для анализа локального траффика, это сниффер(для получения пакетов) и потом анализ этих пакетов. Я почитал много литературы и узнал что лутчше это делать с помощью библиотеки/драйвера libpcap, а для виндовса winpcap, скачал эту библиотеку/драйвер установил, паралельно нашел как с этой библиотекой работать , начал исать программу и при подключении файла <pcap.h> компилятор выдает ошибку что неможет найти этого файла. Подскажите что я делаю не правильно.

P.S. Использую компилятор BCB 6
 
R

ReindeeR

Гость
#2
скачайте файл pcap.h и остальные файлы.
и либу wpcap.lib,в каждом проекте используйте ее.
Далее все файлы засовывайте в папку с проектом,
и подключаете как "pcap.h",кроме этого файла,вам понадобится еще подключать
несколько файлов.
Так же придется в нескольких файлах подправить c <lalala.h> на "lalala.h"
где исправлять,пойметет,компилятор заорет что ниче не нашел.

А проще кинуть все заголовочные файлы в папку include вашего компилятора
и не парится работать как обычно)))
 
S

S-haman

Гость
#3
Reindeer идея хорошая просто некоторых файлов отдельноя я ненашел в интернете для скачивания, может есть какието другие варианты или хотябы откуда можно их взять и их список?
 
R

ReindeeR

Гость
#4
на официальном сайте все есть,но я брал отсюда.
Чтобы видеть этот контент необходимо: Войти или зарегистрироваться

там документации,примеры,все заголовочные файлы и две либы,для никсов и винды.
 
S

S-haman

Гость
#5
ReindeeR
Большое спасибо за заголовочные файлы +1
Только возникло два трабла в боланде не захотели подключаться, БСБ 6, а в вижуал студие 9 всё номра заработал ))
и теперь непосредственно вопрос по иблиотеке в функции pcap_open_live первый параметр это имя адаптера, насколько я понял, если да то как имя этого адаптера должено выглядить я просто перепробовал все известные имена адаптера моего на все ругается, может можно както имена эти получить функцией?
 
R

ReindeeR

Гость
#6
я всегда делал так.
Код:
pcap_if_t *alldevs,*d;
char errbuf[PCAP_ERRBUF_SIZE];
int inum;
pcap_findalldevs_ex(PCAP_SRC_IF_STRING,NULL,&alldevs,errbuf); //находим все устройства.

for(d=alldevs;d;d=d->next)					 // выводим информацию на экран
{
printf("%d. %s",++i,d->name);
if(d->description)
printf(" (%s)\n",d->description);
else
printf(" (Описание отсутствует.)\n");
}

printf("Введите номер интерфейса:");	 //вводим номер устройства.

cin >> inum;

for(d=alldevs,i=0;i<inum-1;d=d->next,i++); // прыжок к выбранному устройству.

printf("%s\n",d->name);	 //в d->name имя устройства,которое можете использовать в дальнейшем
пример взят из офф руководства,
так как очень удобный,использую его всегда.

Если заранее известен номер интерфейса и он не меняется,то можно сразу выбирать,не спрашивая.
Ну это уже вам решать))

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

S-haman

Гость
#7
У меня компилятор фанкции pcap_findalldevs_ex не знает, ему известна только функция pcap_findalldevs
 
S

S-haman

Гость
#9
Забыл ((
после подключения все заработало нормально
Вопрос таков это всё у меня получалось в вижуал студие 2005
пробовал на Рад студие(борландовской) там ругается на 2 файла "bittypes.h" и "stdint.h". первый файл это из тех которые я качал второй это стандартный борландовский.
bittypes.h пишет что "typedef signed char int8_t;" уже обявлен в файле stdint.h и там он действительно есть, подскажите как быть. В вижуал студии таких проблем нету. Я просто почему к борландовским продуктам там есть несколько компонентов которые потом понадобятся.
Плюс ков всему эта рад студия 2007 при попытке подключить файл wpcap.lib выдает ошибку
[ILINK32 Error] Error: 'C:\PROGRAM FILES\CODEGEAR\RAD STUDIO\5.0\LIB\SNIF\WPCAP.LIB' contains invalid OMF record, type 0x21 (possibly COFF)
 
R

ReindeeR

Гость
#10
Сразу скажу что ни в Борланде,ни в вижуал студио ни разу не работал.
Для меня самое лучшее решение это Code::Blocks и Dev C++.
Монстров аля вижуал студио не люблю.
Могу просто посоветовать удалить объявление int8_t в ВинПикаповском файле.

зы.
Мне в скором времени тоже понадобится писать сниффер,
не против,если в аську обращусь?
 
R

ReindeeR

Гость
#12
Плюс ков всему эта рад студия 2007 при попытке подключить файл wpcap.lib выдает ошибку
[ILINK32 Error] Error: 'C:\PROGRAM FILES\CODEGEAR\RAD STUDIO\5.0\LIB\SNIF\WPCAP.LIB' contains invalid OMF record, type 0x21 (possibly COFF)
тут я уже хз че такое,ни разу не сталкивался.
 
S

S-haman

Гость
#13
ReindeeR там надо было конвертирвоать библиотеку(lb) с помощью программы coff2omf.exe, прогармма находитсья в папке bin,находясь в папке bin открыть консоль и дать следующие 4 команды
Код:
coff2omf wpcap.lib wpcap.~lib
copy wpcap.~lib wpcap.lib // эта команда копирует данные из wpcap.~lib в wpcap.lib можно в прнципе и без неё просто переименовать файл
coff2omf Packet.lib Packet.~lib
copy Packet.~lib Packet.lib // эта команда копирует данные из Packet.~lib в Packet.lib можно в прнципе и без неё просто переименовать файл
после чего получившиеся файлы wpcap.lib и Packet.lib безпроблем подключаются в билдере
 
R

ReindeeR

Гость
#14
Мне надеюсь это не понадобится :)
не люблю я ни от борланда,ни от мелкомякгих среды.

зы.
Сниффер еще не готов? :)
 
S

S-haman

Гость
#15
проверял программу на другом компютере, ещё не совсем готовую, и возникла ещё одна проблема, но это уже с переносимостью. При запуске прораммы на другом компютере необходимо присутствие 4 файлов: Borlndmm.dll, cc3280mt.dll, vcl100.bpl и rtl100.bpl все они должны находитсья по пути c:\\windows\sysstem32, также имееться ещё и по второй копии этих файлов вторые копии находятся по C:\Documents and Settings\All Users\Application Data\{2EB4C530-C94F-4893-ABDC-C1E05A89956E}\vclwin32runtimes\C8691228\9FAAECB7\*.bpl и C:\Program Files\CodeGear\RAD Studio\5.0\bin\**.dll можно их както подключить чтобы они находились непосредственно возле исполняемого файла?
Я пробовал через Project->"Add to Project" таким образом всеравно требует их наличие в систем32
 
R

ReindeeR

Гость
#16
:)
еще -1 к борланду с моей стороны :)
когда я писал,чтобы перенести требовалось всего лишь поставить бибилиотека/драйвер pcap.
Если программа хотя бы стартует,то можно в самом начале проверять необходимые файлы,и если что
копировать,перемещать и т.д.
Или делать установщик,который копирует необходимые файлы.Заодно можете
ради красоты и добавить в пуск,на рабочий стол ярлыки и т.д.)))
 
S

S-haman

Гость
#17
Проблему удалось решить следующим образом
1. Зайти в Project/Options
2. На вкладке Compiler выбирать Release
3. На вкладке Packages убирать флажок "Build with runtime packages"
4. На вкладке Linker убирать Use Dynamic RTL
5. Добавить к проекту все необходимые бпл и длл
6. Скомпилирывать.
После этого проэкт, не готовый правда, заработал на другом компе где необходимые файлы находятся рядом с экзефайлом, но после этих действий размер экзе файла вырос из 33 кб до 574 кб.

З.Ы. в прогармме на данный момент есть открытие адаптера, подключение фильтра, получение адресса IP,маски, но я заметил что программа не может октрыть ниодин адаптер, я на это обратил внимание когда мне программа стала выдавать Ап и маску равными 0. при открытии адаптера функцией pcap_open_live возникает следующяя ошибка: "Error opening adapter: Системе не удается найти указанное устройство. (20)", в качестве адаптера я передаю полностью полученое имя адаптера вида: "rpcap://\Device\NPF_{77F08C02-9410-471C-86A4-E6133522D16C}", пробовал также такой вариант: "\Device\NPF_{211439FA-7598-44EC-A677-27F448F7DB19}", я его увидел в одном сниффере как адаптер, результат тотже
 
R

ReindeeR

Гость
#18
Можно попробовать считать название адаптера из реестра и его использовать.
Только у меня вроде не получался такой вариант,не помню почему :unsure:
 
S

S-haman

Гость
#19
С той проблеимой я разобрлся следующим образом,
раньше для нахождения адаптеров я использовал функцию pcap_findalldevs_ex и соответственно описание адаптера и имя приходилось обрабатывать, но всеравно не работало, после того как я воспользовался функцией pcap_findalldevs всё заработало нормально, даже смог получить маску и ап карты, но они правда както странно выглядят "65536(0x0000FFFF)- это маска, реальная маска на адаптере (255.255.0.0), 2732(0x00000AAC)- ато АП, реальный(172.10.1.14)" эти параметры получаю используя функцию pcap_lookupnet ошибок при этом нету.
все эти полученны данные я записываю в коллекцию, для каждого устройства храню его имя, описание, ап и маску ну чтоб в дальнейшем было проще работать, эту коллекцию я заполняют при загрузку форму потом в комбобоксе выбираю адаптер и по нажатию на кнопку в идеале он далжен принимать пакеты. Пробовал получать пакеты с помощью функции pcap_next, но он возвращяет какуюто ерунду наподобие "яяяяяя" и причем возвращает иногда , а иногда ничего вообще невозвращяет хотя по торренту закачка идет в полную, да и по сети. Какой функцией лутчше принимать пакеты?
 
R

ReindeeR

Гость
#20
pcap_loop()
а потом пакет по косточкам разбирать :unsure: