Форум программистов CODEBY.NET Хостинг в Беларуси — Active Technologies

Разработка бизнес сайтов

Нужны клиенты? Тогда сюда быстрее...
X   Сообщение сайта
(Сообщение закроется через 2 секунды)

Здравствуйте, гость ( Вход | Регистрация )




> Анализатор трафика, проблемма с winpcap
S-haman
Вставить ник
сообщение 19:04:2008, 17:38
Цитата Ответить 


Новенький
Иконка группы

Группа: Новенький
Сообщений: 51
Регистрация: 26:03:2007
Из: Кривой Рог
Пользователь №: 9 890



Репутация:   0  


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

P.S. Использую компилятор BCB 6
Подняться вверх 
 
Сообщение #1
2 страниц V   1 2 >  
Новая тема 
Ответов (1 - 29)
ReindeeR
Вставить ник
сообщение 19:04:2008, 17:55
Цитата Ответить 


Новенький
Иконка группы

Группа: Новенький
Сообщений: 39
Регистрация: 3:04:2008
Пользователь №: 16 361



Репутация:   1  


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

А проще кинуть все заголовочные файлы в папку include вашего компилятора
и не парится работать как обычно)))
Подняться вверх 
 
Сообщение #2
S-haman
Вставить ник
сообщение 19:04:2008, 18:48
Цитата Ответить 


Новенький
Иконка группы

Группа: Новенький
Сообщений: 51
Регистрация: 26:03:2007
Из: Кривой Рог
Пользователь №: 9 890



Репутация:   0  


Reindeer идея хорошая просто некоторых файлов отдельноя я ненашел в интернете для скачивания, может есть какието другие варианты или хотябы откуда можно их взять и их список?
Подняться вверх 
 
Сообщение #3
ReindeeR
Вставить ник
сообщение 19:04:2008, 19:07
Цитата Ответить 


Новенький
Иконка группы

Группа: Новенький
Сообщений: 39
Регистрация: 3:04:2008
Пользователь №: 16 361



Репутация:   1  


на официальном сайте все есть,но я брал отсюда.
]]>https://projects.honeynet.org/capture-hpc/b...r/wpcap?rev=259]]>
там документации,примеры,все заголовочные файлы и две либы,для никсов и винды.

Сообщение отредактировал ReindeeR - 19:04:2008, 19:09
Подняться вверх 
 
Сообщение #4
S-haman
Вставить ник
сообщение 24:04:2008, 16:45
Цитата Ответить 


Новенький
Иконка группы

Группа: Новенький
Сообщений: 51
Регистрация: 26:03:2007
Из: Кривой Рог
Пользователь №: 9 890



Репутация:   0  


ReindeeR
Большое спасибо за заголовочные файлы +1
Только возникло два трабла в боланде не захотели подключаться, БСБ 6, а в вижуал студие 9 всё номра заработал ))
и теперь непосредственно вопрос по иблиотеке в функции pcap_open_live первый параметр это имя адаптера, насколько я понял, если да то как имя этого адаптера должено выглядить я просто перепробовал все известные имена адаптера моего на все ругается, может можно както имена эти получить функцией?
Подняться вверх 
 
Сообщение #5
ReindeeR
Вставить ник
сообщение 24:04:2008, 18:08
Цитата Ответить 


Новенький
Иконка группы

Группа: Новенький
Сообщений: 39
Регистрация: 3:04:2008
Пользователь №: 16 361



Репутация:   1  


я всегда делал так.
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 имя устройства,которое можете использовать в дальнейшем

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

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

зы.
в коде мог опечаться,так как писал из формы,
сами знаете.не очень то удобно
Подняться вверх 
 
Сообщение #6
S-haman
Вставить ник
сообщение 24:04:2008, 18:46
Цитата Ответить 


Новенький
Иконка группы

Группа: Новенький
Сообщений: 51
Регистрация: 26:03:2007
Из: Кривой Рог
Пользователь №: 9 890



Репутация:   0  


У меня компилятор фанкции pcap_findalldevs_ex не знает, ему известна только функция pcap_findalldevs
Подняться вверх 
 
Сообщение #7
ReindeeR
Вставить ник
сообщение 24:04:2008, 21:31
Цитата Ответить 


Новенький
Иконка группы

Группа: Новенький
Сообщений: 39
Регистрация: 3:04:2008
Пользователь №: 16 361



Репутация:   1  


remote-ext.h
подключили?
Подняться вверх 
 
Сообщение #8
S-haman
Вставить ник
сообщение 28:04:2008, 19:18
Цитата Ответить 


Новенький
Иконка группы

Группа: Новенький
Сообщений: 51
Регистрация: 26:03:2007
Из: Кривой Рог
Пользователь №: 9 890



Репутация:   0  


Забыл ((
после подключения все заработало нормально
Вопрос таков это всё у меня получалось в вижуал студие 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)

Сообщение отредактировал S-haman - 28:04:2008, 20:46
Подняться вверх 
 
Сообщение #9
ReindeeR
Вставить ник
сообщение 28:04:2008, 20:33
Цитата Ответить 


Новенький
Иконка группы

Группа: Новенький
Сообщений: 39
Регистрация: 3:04:2008
Пользователь №: 16 361



Репутация:   1  


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

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

Сообщение отредактировал ReindeeR - 28:04:2008, 20:34
Подняться вверх 
 
Сообщение #10
S-haman
Вставить ник
сообщение 29:04:2008, 08:43
Цитата Ответить 


Новенький
Иконка группы

Группа: Новенький
Сообщений: 51
Регистрация: 26:03:2007
Из: Кривой Рог
Пользователь №: 9 890



Репутация:   0  


ReindeeR да нет не против ))
Подняться вверх 
 
Сообщение #11
ReindeeR
Вставить ник
сообщение 29:04:2008, 12:35
Цитата Ответить 


Новенький
Иконка группы

Группа: Новенький
Сообщений: 39
Регистрация: 3:04:2008
Пользователь №: 16 361



Репутация:   1  


Цитата(S-haman @ 28:04:2008 - 23:18) *
Плюс ков всему эта рад студия 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)

тут я уже хз че такое,ни разу не сталкивался.
Подняться вверх 
 
Сообщение #12
S-haman
Вставить ник
сообщение 29:04:2008, 16:20
Цитата Ответить 


Новенький
Иконка группы

Группа: Новенький
Сообщений: 51
Регистрация: 26:03:2007
Из: Кривой Рог
Пользователь №: 9 890



Репутация:   0  


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 безпроблем подключаются в билдере
Подняться вверх 
 
Сообщение #13
ReindeeR
Вставить ник
сообщение 30:04:2008, 17:41
Цитата Ответить 


Новенький
Иконка группы

Группа: Новенький
Сообщений: 39
Регистрация: 3:04:2008
Пользователь №: 16 361



Репутация:   1  


Мне надеюсь это не понадобится smile.gif
не люблю я ни от борланда,ни от мелкомякгих среды.

зы.
Сниффер еще не готов? rolleyes.gif
Подняться вверх 
 
Сообщение #14
S-haman
Вставить ник
сообщение 1:05:2008, 12:09
Цитата Ответить 


Новенький
Иконка группы

Группа: Новенький
Сообщений: 51
Регистрация: 26:03:2007
Из: Кривой Рог
Пользователь №: 9 890



Репутация:   0  


проверял программу на другом компютере, ещё не совсем готовую, и возникла ещё одна проблема, но это уже с переносимостью. При запуске прораммы на другом компютере необходимо присутствие 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
Подняться вверх 
 
Сообщение #15
ReindeeR
Вставить ник
сообщение 1:05:2008, 13:02
Цитата Ответить 


Новенький
Иконка группы

Группа: Новенький
Сообщений: 39
Регистрация: 3:04:2008
Пользователь №: 16 361



Репутация:   1  


blink.gif
еще -1 к борланду с моей стороны biggrin.gif
когда я писал,чтобы перенести требовалось всего лишь поставить бибилиотека/драйвер pcap.
Если программа хотя бы стартует,то можно в самом начале проверять необходимые файлы,и если что
копировать,перемещать и т.д.
Или делать установщик,который копирует необходимые файлы.Заодно можете
ради красоты и добавить в пуск,на рабочий стол ярлыки и т.д.)))
Подняться вверх 
 
Сообщение #16
S-haman
Вставить ник
сообщение 1:05:2008, 13:43
Цитата Ответить 


Новенький
Иконка группы

Группа: Новенький
Сообщений: 51
Регистрация: 26:03:2007
Из: Кривой Рог
Пользователь №: 9 890



Репутация:   0  


Проблему удалось решить следующим образом
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}", я его увидел в одном сниффере как адаптер, результат тотже

Сообщение отредактировал S-haman - 1:05:2008, 17:17
Подняться вверх 
 
Сообщение #17
ReindeeR
Вставить ник
сообщение 1:05:2008, 23:47
Цитата Ответить 


Новенький
Иконка группы

Группа: Новенький
Сообщений: 39
Регистрация: 3:04:2008
Пользователь №: 16 361



Репутация:   1  


Можно попробовать считать название адаптера из реестра и его использовать.
Только у меня вроде не получался такой вариант,не помню почему unsure.gif
Подняться вверх 
 
Сообщение #18
S-haman
Вставить ник
сообщение 2:05:2008, 13:42
Цитата Ответить 


Новенький
Иконка группы

Группа: Новенький
Сообщений: 51
Регистрация: 26:03:2007
Из: Кривой Рог
Пользователь №: 9 890



Репутация:   0  


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


Новенький
Иконка группы

Группа: Новенький
Сообщений: 39
Регистрация: 3:04:2008
Пользователь №: 16 361



Репутация:   1  


pcap_loop()
а потом пакет по косточкам разбирать smile.gif
Подняться вверх 
 
Сообщение #20
S-haman
Вставить ник
сообщение 2:05:2008, 18:46
Цитата Ответить 


Новенький
Иконка группы

Группа: Новенький
Сообщений: 51
Регистрация: 26:03:2007
Из: Кривой Рог
Пользователь №: 9 890



Репутация:   0  


ReindeeR
спасибо за функцию у меня небыло про такую функцию написано )).
в этой функции не понятно только одно как сами данные получить, тоесть в третем параметре там где "pcap_handle callback" я вызываю функцию которая имеет три параметра:
u_char *param, const pcap_pkthdr *header, const u_char *pkt_data

второй параметр это заголовок я сравнивал полученные данные с wireshark правильно определило но вот другие два параметра возвращяют пустые строки, как с ними работать? второй параметр это структура с ним безпроблем работается а те это просто строки, которые всегда пустые. Подскажите как с ними работать
Подняться вверх 
 
Сообщение #21
ReindeeR
Вставить ник
сообщение 3:05:2008, 01:44
Цитата Ответить 


Новенький
Иконка группы

Группа: Новенький
Сообщений: 39
Регистрация: 3:04:2008
Пользователь №: 16 361



Репутация:   1  


pcap_loop()
принимает четыре параметра.
1-дескриптор открытой сессии.
2-кол-во пакетов,-1 означает что хавает все до ошибки.
3-функция обработчик пакета.
4-используется для передачи еще каких-нить данных,если ничего не надо,то NULL
ну тут впринципе все понятно,самое главное,это функция,которая обрабатывает пакеты.
В данном случае функция-обработчик не любая попавшаяся,а заранее определенная.
void packHandler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data)

ну это и так все ясно было.
Если не забыли,то в pcap_loop() в четвертом параметре можно чето передать.
Так вот,первый аргумент у функции-обработчика как раз и принимает то,что было передано в четвертом параметре
pcap_loop().Соответственно если передан NULL,то и не придет ничего,ради интереса можете убедиться
и послать строку,а в обработчике вывести ее на экран smile.gif
Второй параметр,структура ,на всякий случай,выглядит она так
struct pcap_pkthdr {
  struct timeval ts;
  bpf_u_int32 caplen;
  bpf_u_int32 len;  
};

Третий параметр,буфер,в который помещается сам принятый пакет.
Вот его как раз и надо мучать.Определяете все структуры заголовков.
Если совсем разбирать пакет,то это примерно в таком порядке будет выглядеть:
ETHERNET
ARP
IP
TCP/UDP или чего у вас там будет.

Ну вот вроде все пока что.
зы.
ко мне на "Вы" не надо,маленький я еще для этого smile.gif

Надо еще с синтаксисом выражений для фильтра разобраться,все руки не доходят huh.gif
Подняться вверх 
 
Сообщение #22
S-haman
Вставить ник
сообщение 3:05:2008, 14:46
Цитата Ответить 


Новенький
Иконка группы

Группа: Новенький
Сообщений: 51
Регистрация: 26:03:2007
Из: Кривой Рог
Пользователь №: 9 890



Репутация:   0  


ReindeeR пример хороший но одно но, третий параметр в котором хранятся данные он пустой он возвращяет пустую строку. В некоторых программах я увидел следующий пример как они получают данные они обявляют структуру в которой описываютатрибуты пакета потом присваивают переменно полученныее данные конвертированыфе в эту структуру и работают с этой структурой пример
struct sniff_ip 
{
#if BYTE_ORDER == LITTLE_ENDIAN
    u_int ip_hl:4, /* header length */
    ip_v:4; /* version */
#endif
#if BYTE_ORDER == BIG_ENDIAN
    u_int ip_v:4, /* version */
    ip_hl:4; /* header length */
#endif /* not _IP_VHL */
    u_char ip_tos; /* type of service */
    u_short ip_len; /* total length */
    u_short ip_id; /* identification */
    u_short ip_off; /* fragment offset field */
#define IP_RF 0x8000 /* reserved fragment flag */
#define IP_DF 0x4000 /* dont fragment flag */
#define IP_MF 0x2000 /* more fragments flag */
#define IP_OFFMASK 0x1fff /* mask for fragmenting bits */
    u_char ip_ttl; /* time to live */
    u_char ip_p; /* protocol */
    u_short ip_sum; /* checksum */
    struct in_addr ip_src,ip_dst; /* source and dest address */
};
struct sniff_ip *sip;  
sip = (struct sniff_ip*)(packet); //packet з параметр функции pcap_handle

после чего обращяясь к элементам sip работают с элементами пакета, но здесь только заголовочные фрагменты пакета
если packet не ковертирвоать в структуру то он равен концу строки тоесть '\0'
Как можно просто из этой переменной получить пакет в обычном виде:
00 18 f3 5b f4 b9 00 e0  4e 09 c3 d4 08 00 45 00
00 28 d2 c1 40 00 80 06  cd dc ac 0a 01 0f ac 0a
01 0e 1f 90 06 aa f7 ca  f6 92 e6 42 ce 47 50 10
fb b4 90 cb 00 00 00 00  00 00 00 00
или подобном
Подняться вверх 
 
Сообщение #23
ReindeeR
Вставить ник
сообщение 3:05:2008, 16:09