如何仅使用.pcap文件中的libpcap提取HTTP数据包?

时间:2019-05-20 17:15:57

标签: networking wireshark libpcap

好吧,我使用libpcap做了一些.pcap文件解析器。
我要做的就是从pcapfile获取FTP,SSH,DNS和HTTP的数据包数量和总字节数。
我尝试使用端口过滤协议(即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.
                        }
}

如何有效地提取上述协议的数据包?
谢谢。

0 个答案:

没有答案