Ну, я сделал парсер файлов .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.
}
}
Как эффективно извлечь вышеуказанный пакет протокола?
Спасибо.