Jump to content
СофтФорум - всё о компьютерах и не только

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


Recommended Posts

Здравствуйте, пишу я программу для получения статистических данных по взаимодействию компютеров между собой, тоесть к примеру необходимо узнать какие компютеры с какими взаимодействуют, сколько между собой данных передают ..., но это всё не очень сложно, сложность пока заключается в том чтобы получить пакет из сети. Тоесть я установил необходимый драйвер, winpcap, подключил необходимые хидеры и либы.

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

#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 0000 28 d2 c1 40 00 80 06  cd dc ac 0a 01 0f ac 0a01 0e 1f 90 06 aa f7 ca  f6 92 e6 42 ce 47 50 10fb b4 90 cb 00 00 00 00  00 00 00 00

как можно получить это с помощью вышеописанной функции или каким либо другим способом, используя только компоненты winpcap

P.S. Для разработки использую CodeGear Rad Studio 2007 c++

Edited by Delphi
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...