Я пишу сетевой анализатор и мне нужно отфильтровать пакеты, сохраненные в файле, я написал некоторый код для фильтрации http-пакетов, но я не уверен, работает ли он так, как должен, потому что, когда я использую свой код в дампе pcapВ результате получается 5 пакетов, но при записи в Wireshark http в фильтре дает мне 2 пакета, и если я использую:
tcpdump port http -r trace-1.pcap
, это дает мне 11 пакетов.
Ну, 3 разных результата, этонемного сбивает с толку.
Фильтр и обработка пакетов в моем коде:
...
if (pcap_compile(handle, &fcode, "tcp port 80", 1, netmask) < 0)
...
while ((packet = pcap_next(handle,&header))) {
u_char *pkt_ptr = (u_char *)packet;
//parse the first (ethernet) header, grabbing the type field
int ether_type = ((int)(pkt_ptr[12]) << 8) | (int)pkt_ptr[13];
int ether_offset = 0;
if (ether_type == ETHER_TYPE_IP) // ethernet II
ether_offset = 14;
else if (ether_type == ETHER_TYPE_8021Q) // 802
ether_offset = 18;
else
fprintf(stderr, "Unknown ethernet type, %04X, skipping...\n", ether_type);
//parse the IP header
pkt_ptr += ether_offset; //skip past the Ethernet II header
struct ip_header *ip_hdr = (struct ip_header *)pkt_ptr;
int packet_length = ntohs(ip_hdr->tlen);
printf("\n%d - packet length: %d, and the capture lenght: %d\n", cnt++,packet_length, header.caplen);
}
Мой вопрос: почему при фильтрации http есть 3 разных результата?И / или если я фильтрую это неправильно, то как я могу сделать это правильно, также есть ли способ фильтровать пакеты http (или ssh, ftp, telnet ...), используя что-то другое, чем номера портов?
Спасибо