Delphi Posted May 4, 2008 Report Share Posted May 4, 2008 (edited) Здравствуйте, пишу я программу для получения статистических данных по взаимодействию компютеров между собой, тоесть к примеру необходимо узнать какие компютеры с какими взаимодействуют, сколько между собой данных передают ..., но это всё не очень сложно, сложность пока заключается в том чтобы получить пакет из сети. Тоесть я установил необходимый драйвер, 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 May 4, 2008 by Delphi Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now