我想使用.pcap
库解析WireShark生成的libpcap
文件中的RTP数据包。
我已经看到了一些在设备上使用libpcap
来获取数据包的示例,但我无法找到任何可以从.pcap
文件中提取特定数据包的示例。
任何人都知道这些示例的链接或任何拥有此类示例代码的人。
感谢。
答案 0 :(得分:2)
libpcap使用函数 pcap_compile 和 pcap_setfilter (描述here和示例代码)在启动捕获循环之前过滤数据包。过滤器语法在man page for TCPDump
中描述过滤RTP数据包带来了进一步的挑战,因为它们不是通过标准端口发送的,并且没有其他方便的方法来检测协议。用于RTP的端口由RTP设置之前的控制信道协议(例如SIP)协商。 This example包含SIP消息,其中 rport = 5060 行提供用于RTP的UDP端口(参见下文)。
因此,检测RTP需要检查SIP协议数据包(或其他信令协议,以确定要过滤的RTP端口。
SIP/2.0 200 OK
Call-ID: 29858147-465b0752@29858051-465b07b2
Contact: pel<sip:35104723@192.168.1.2:5060;line=7d36558f31367051>;q=0.500;expires=1200
CSeq: 6 REGISTER
From: <sip:35104723@sip.cybercity.dk>;tag=659abf
P-Associated-URI: <sip:35104723@sip.cybercity.dk>
To: <sip:35104723@sip.cybercity.dk>;tag=00-04087-1701bae7-76fb74995
Via: SIP/2.0/UDP 192.168.1.2;received=80.230.219.70;rport=5060;branch=z9hG4bKnp6658824-465059f1192.168.1.2