我是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协议的分组。
答案 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过滤器保存状态信息,不可能。