#python #scapy #void #rtp
#python #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)
Проблема в том, что я вижу пакет как UDP в wireshark, а не RTP. Я вижу это с помощью структур SIP, поэтому я не знаю, в чем проблема,
Комментарии:
1. Вероятно, вам нужно «декодировать как», потому что выбранный вами порт довольно случайный.
2. Я сделал это: bind_layers(UDP, RTP, dport=server_port) после pkt, но не работает
Ответ №1:
Короче говоря, Wireshark показывает вам UDP, потому что нет пакетов SIP / SDP. Эти пакеты инициируют сеанс соединения, а затем Wireshark может следовать потоку и декодировать UDP в RTP. В SIP / SDP вы можете найти основную информацию: откуда, кому, тип носителя и т.д. (RFC 4566 SDP, RFC3621 SIP). Таким образом, даже если вы создадите идеальный RTP-пакет с помощью scapy, без инициализации сеанса Wireshark всегда будет декодировать его как UDP.
РЕДАКТИРОВАТЬ: Кстати, использование bind_layers(UDP, RTP, dport=*) в scapy для привязки UDP-пакетов с помощью RTP может помочь
Ответ №2:
Вы можете указать Wireshark декодировать номер порта как определенный протокол, используя -d
опцию. например, для декодирования вышеуказанного пакета как использование RTP:
wireshark -d udp.port==5060,rtp rtp_pkt.pcap
Хотя, если вы собираетесь создать пакет RTP, вам следует стараться избегать использования хорошо известных номеров деталей, таких как 5060 (которые обычно сопоставляются с протоколом SIP — именно поэтому Wireshark пытается декодировать его как таковой).