过滤pcap文件中的数据包

filtering packets from pcap file

本文关键字:数据包 文件 pcap 过滤      更新时间:2023-10-16

我是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协议的报文。

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

不,它是用于实时捕获从保存文件读取。

过滤器应该只通过ETH->IP->UDP->RTP->H264协议的报文。

使用pcap_compile()不可能有这样的过滤器。

要识别RTP流量,您要么必须知道流量将使用哪些UDP端口,并基于此进行过滤,要么必须查看UDP有效载荷中的几个字段,并尝试猜测是否为RTP流量(并愿意与-RTP数据包一起生活通过过滤器)。Wireshark有一个相当弱的启发式来识别运行在UDP之上的RTP;默认情况下不启用,因为它非常弱,可能会将非RTP流量识别为RTP流量。

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