用scapy发送RTP数据包,然后戴上帽子查看



我有这样的代码来写一个大写的RTP数据包:

client = "192.168.10.1"
server = "192.168.10.5"
client_port = 5061
server_port = 5060

rtp = { 
"sequence": 1,
"timestamp": 1,
"marker": 1,
"payload_type": 17
}
pkt= Ether()/IP(src=client, dst=server)/UDP(sport=client_port, dport=server_port)/RTP(**rtp)
wrpcap("rtp_pkt.pcap",pkt)

问题是,我在wireshark中看到的数据包是UDP,而不是RTP。我可以用SIP结构看到它,所以我不知道问题出在哪里,

简而言之,Wireshark向您显示UDP,因为没有SIP/SDP数据包。这些数据包启动连接会话,然后Wireshark可以跟随流并将UDP解码为RTP。在SIP/SDP中,您可以找到主要信息:From、To、Media type等(RFC 4566 SDP、RFC3621 SIP(。因此,即使你用scapy构建了理想的RTP数据包,在没有会话启动的情况下,Wireshark也会将其解码为UDP。

编辑:顺便说一句,在scapy中使用bind_layers(UDP、RTP、dport=*(将UDP数据包与RTP绑定,可能有助于

您可以告诉Wireshark使用-d选项将端口号解码为特定协议。例如,将上述数据包解码为RTP使用:

wireshark -d udp.port==5060,rtp rtp_pkt.pcap

不过,如果你要创建RTP数据包,你应该尽量避免使用众所周知的部件号,如5060(它通常映射到SIP协议,这就是Wireshark试图将其解码的原因(。

相关内容

最新更新