Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Работа с драйвером WinPCap

10K
04 мая 2008 года
s-haman
64 / / 27.03.2007
Здравствуйте, пишу я программу для получения статистических данных по взаимодействию компютеров между собой, тоесть к примеру необходимо узнать какие компютеры с какими взаимодействуют, сколько между собой данных передают ..., но это всё не очень сложно, сложность пока заключается в том чтобы получить пакет из сети. Тоесть я установил необходимый драйвер, winpcap, подключил необходимые хидеры и lib-файлы.
У меня в программе уже есть определение сетевыех картб перевод карты в реждим чтения всех пакетов и получение длины пакета, но самого пакета нету, я делаю таким образом
Код:
#include "h/pcap.h"
 struct lan_ad               // структура для хранения адаптеров
{
    char *adapter;         //описание адаптера
    char *name;            //имя адаптера
    bpf_u_int32 mask,Net;
};
pcap_t *fp;  
char *data;
char error[PCAP_ERRBUF_SIZE];
int len;
struct lan_ad net[5];
void packetHandler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data) //обработка принятых пакетов
{
head=header->len;

}
__fastcall TForm1::TForm1(TComponent* Owner): TForm(Owner) //при загрузке формы получаем имена и информацию про адаптеры
{
    pcap_if_t *alldevs,*d;
    int inum=0,i;
    i=pcap_findalldevs(&alldevs,error);
    ComboBox1->Clear();
    for(d=alldevs;d;d=d->next)                     // выводим информацию на экран
        {
        net[inum].name=d->name;
        net[inum].adapter=d->description;
        pcap_lookupnet(d->name,&net[inum].Net,&net[inum].mask,error);
        ComboBox1->Items->Add(net[inum].adapter);
        inum++;
        }
    len=inum;
}
void __fastcall TForm1::Button1Click(TObject *Sender) //получаем пакеты
{
char *filter=NULL;
struct bpf_program fcode;
fp=pcap_open_live(net[ComboBox1->ItemIndex].name,0,1,20,error);
pcap_loop(fp,1,packetHandler,NULL);
}

в функцие packetHandler третий параметр это ссылка на пакет. Для того чтобы получить пакет его необходимо конвертирвоать в структуру, а есть ли какойто способ получить просто пакет потоком в виде:
 
Код:
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

как можно получить это с помощью вышеописанной функции или каким либо другим способом, используя только компоненты winpcap
P.S. Для разработки использую CodeGear Rad Studio 2007 c++
489
04 мая 2008 года
NeO_u
277 / / 11.10.2006
Я сейчас точно тебе не скажу, если надо могу завтра выложить, выходные, все осталось на работе:-) Но, насколько я помню, когда скачиваешь исходники WinPCap, там должны быть примеры перехвата пакетов. В одном из тех примеров, будет показано как получить пакет в 16ричном ф-те...Посмотри внимательно.
10K
05 мая 2008 года
s-haman
64 / / 27.03.2007
NeO_u выложите пожалуста, я винпкап качал с одного сайта там нидеры, либы и больше 300 файлов(описание и примеры) если буду разбиратся то в сроки не успею (( итам все примеры по линукс, некоторые могут не работать под виндовсом.
Качал я отсюда. там хидеры либы и примеры с документацией, просматривая документацию и примеры я просто ненашел, так акк незнаю даже как должно выглядеть
45K
13 января 2010 года
DarkEld3r
1 / / 25.11.2008
Код:
void dispatcher_handler(u_char *temp1,
                        const struct pcap_pkthdr *header,
                        const u_char *pkt_data)
{
    u_int i=0;
   
    /*
     * unused variable
     */
    (VOID*)temp1;

    /* print pkt timestamp and pkt len */
    printf("%ld:%ld (%ld)\n", header->ts.tv_sec, header->ts.tv_usec, header->len);         
   
    /* Print the packet */
    for (i=1; (i < header->caplen + 1 ) ; i++)
    {
        printf("%.2x ", pkt_data[i-1]);
        if ( (i % LINE_LEN) == 0) printf("\n");
    }
   
    printf("\n\n");    
   
}
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог