Как я могу извлечь HTTP-пакеты ТОЛЬКО используя libpcap из файла .pcap? - PullRequest
0 голосов
/ 20 мая 2019

Ну, я сделал парсер файлов .pcap, используя libpcap.
Все, что мне нужно сделать, это получить количество пакетов и общее количество байтов FTP, SSH, DNS и HTTP из pcapfile.
Я попытался отфильтровать протоколы с портом (т. Е. Http-> 80, ftp-> 21, ssh-> 22 ..), но, отфильтровав таким образом, я получил результат TCP-пакетов (не включает вышеуказанный протокол,показал в WIRESHARK), которые используют те же порты.
приведенный ниже код является примером фильтрации FTP.

if((ntohs(tcp_hdr->th_sport) == _FTP_ && ntohs(tcp_hdr->th_dport) != _FTP_) || (ntohs(tcp_hdr->th_sport) != _FTP_ && ntohs(tcp_hdr->th_dport) == _FTP_))
 {
                        if((ntohs(ip_hdr->ip_len) - (ip_hdr->ip_hl) * 4 - (tcp_hdr->th_off)*4 ) > 0) // make sure tcp segment's length > 0
                        { 
                             //THIS WOULD BE FTP! BUT, NOT ONLY include FTP PACKET, but ALSO PURE TCP Packets! 
                             //pure TCP packet means that it does not have any above protocol(showed in WIRESHARK), but uses same port(21). 
                              PURE TCP means [tcp|ipv4|ethernet], while All I want is [FTP|tcp|ipv4|ethernet] packets.
                        }
}

Как эффективно извлечь вышеуказанный пакет протокола?
Спасибо.

...