我有以下代码来在cap中编写一个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结构中看到它,所以我不知道问题出在哪里,
发布于 2020-11-25 07:03:17
简而言之,Wireshark向您显示UDP,因为没有SIP/SDP数据包。这些数据包发起连接会话,然后Wireshark可以跟随流并将UDP解码为RTP。在SDP中你可以找到主要信息:发件人,收件人,媒体类型等(RFC 4566 SDP,RFC3621 SIP)。因此,即使你构建了理想的RTP数据包,没有会话初始化,Wireshark也会始终将其解码为UDP。
编辑:顺便说一句,使用中的bind_layers( UDP,RTP,dport=*)来绑定UDP数据包和RTP,可能会有所帮助。
发布于 2022-01-21 17:37:53
您可以使用-d option告诉Wireshark将端口号解码为特定协议。例如,要将上述数据包解码为RTP,请使用:
wireshark -d udp.port==5060,rtp rtp_pkt.pcap但是,如果您要创建一个RTP数据包,您应该尽量避免使用众所周知的部件号,如5060 (它通常映射到SIP协议-这就是Wireshark尝试解码它的原因)。
https://stackoverflow.com/questions/64983044
复制相似问题