Отправьте RTP-пакет с помощью scapy и увидите его в шапке

#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 пытается декодировать его как таковой).