好吧,我使用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.
}
}
如何有效地提取上述协议的数据包?
谢谢。