【问题标题】:filtering packets from pcap file从 pcap 文件中过滤数据包
【发布时间】:2014-06-30 17:34:03
【问题描述】:

我是 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 文件加载的数据包?过滤器应该只通过来自 ETH->IP->UDP->RTP->H264 协议的数据包,谢谢。
  • 据我记得,pcap 不在乎它是实时捕获还是来自离线文件,但我可能是错的。您可能应该阅读他们的手册。
  • Guy Harris here 说:“pcap_setfilter() 作用于你用 pcap_open_offline() 打开的 pcap_t,就像它作用于你用 pcap_open_live() 打开的 pcap_t 一样。 "

标签: c++ pcap libpcap winpcap


【解决方案1】:

我找到了 pcap_compile() 函数,但据我了解,这是用于实时捕捉。

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

过滤器应该只通过来自 ETH->IP->UDP->RTP->H264 协议的数据包。

使用pcap_compile() 无法实现这样的过滤器。

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

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

【讨论】:

    猜你喜欢
    • 2012-03-04
    • 2012-12-08
    • 1970-01-01
    • 2018-03-10
    • 1970-01-01
    • 1970-01-01
    • 2018-04-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多