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

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

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

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




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


Новенький
*

Группа: Программист
Сообщений: 48
Регистрация: 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
Цитата Ответить 


Новенький
*

Группа: Программист
Сообщений: 38
Регистрация: 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
Цитата Ответить 


Новенький
*

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



Репутация: - 0 +


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


Новенький
*

Группа: Программист
Сообщений: 38
Регистрация: 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
Цитата Ответить 


Новенький
*

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



Репутация: - 0 +


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


Новенький
*

Группа: Программист
Сообщений: 38
Регистрация: 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
Цитата Ответить 


Новенький
*

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



Репутация: - 0 +


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


Новенький
*

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



Репутация: - 1 +


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


Новенький
*

Группа: Программист
Сообщений: 48
Регистрация: 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
Цитата Ответить 


Новенький
*

Группа: Программист
Сообщений: 38
Регистрация: 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
Цитата Ответить 


Новенький
*

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



Репутация: - 0 +


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


Новенький
*

Группа: Программист
Сообщений: 38
Регистрация: 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
Цитата Ответить 


Новенький
*

Группа: Программист
Сообщений: 48
Регистрация: 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
Цитата Ответить 


Новенький
*

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



Репутация: - 1 +


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

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


Новенький
*

Группа: Программист
Сообщений: 48
Регистрация: 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
Цитата Ответить 


Новенький
*

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



Репутация: - 1 +


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


Новенький
*

Группа: Программист
Сообщений: 48
Регистрация: 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
Цитата Ответить 


Новенький
*

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



Репутация: - 1 +


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


Новенький
*

Группа: Программист
Сообщений: 48
Регистрация: 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
Цитата Ответить 


Новенький
*

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



Репутация: - 1 +


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


Новенький
*

Группа: Программист
Сообщений: 48
Регистрация: 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
Цитата Ответить 


Новенький
*

Группа: Программист
Сообщений: 38
Регистрация: 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
Цитата Ответить 


Новенький
*

Группа: Программист
Сообщений: 48
Регистрация: 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
Цитата