从pcap文件中过滤数据包

时间:2014-05-13 06:54:27

标签: c++ pcap libpcap winpcap

我是pcap库的新手,我正在构建一个程序来加载pcap文件并使用winpcap处理它以满足我的需求。

这是我的伪代码的一部分:

pcap_file= pcap_open_offline(pcap_path, errbuff);

while ( !EOF )
{
    //read the next packet from pcap file
    pcap_next_ex(pcap_file, &header, &data);
    if ( the packet belongs to ETH->IP->UDP->RTP->H264 protocol)
        process_packet(header, data);
}

我找到了函数pcap_compile(),但根据我的理解,这是实时捕获。

由于我将pcap文件加载离线,我很难找到类似的过滤功能。

如何过滤从pcap文件加载的数据包?过滤器应仅传递来自ETH-> IP-> UDP-> RTP-> H264协议的分组。

1 个答案:

答案 0 :(得分:3)

  

我找到了函数pcap_compile(),但根据我的理解,这是实时捕获。

不,它是从保存文件中实时捕获 AND 读取的。

  

过滤器应仅传递来自ETH-> IP-> UDP-> RTP-> H264协议的数据包。

使用pcap_compile()无法进行此类过滤。

要识别RTP流量,您必须知道流量将使用哪些UDP端口,并根据该端口进行过滤,或者您必须查看UDP有效负载中的几个字段并尝试猜测它是否是RTP流量(并且愿意使用 -RTP数据包通过过滤器)。 Wireshark有一个相当弱的启发式算法来识别在UDP上运行的RTP;它默认情况下启用,因为它很弱,可能会将非RTP流量识别为RTP流量。

对于H.264,Wireshark认识到基于SIP / SDP设置流量,这意味着它涉及比使用pcap过滤器更复杂的数据包解析,更重要的是,涉及使用pcap过滤器保存状态信息,不可能