python - 使用Python创建RTP数据包

标签 python python-3.x sockets wireshark rtp

我正在大学从事项目。我想做的是我希望我的程序能够更改 RTP 数据包有效负载中的位。我正在尝试创建一个简单的工具,对 RTP 数据包的有效负载应用隐写术 - 首先它会“捕获”从我的计算机发送的 rtp 数据包,然后更改有效负载部分并将数据包进一步发送到目的地。我要做的第一件事(在学习时)是创建 RTP 数据包流。我以为我成功了,直到我检查了 Wireshark:

enter image description here

我们看到的只是UDP数据包(python socket.SOCK_DGRAM)

enter image description here 只是简单的位数据流..

我正在尝试通过 RCF 3550 创建数据包:

  • 版本 - 2 位;
  • 填充 - 1 位;
  • 扩展名 - 1 位;
  • csrc_count - 4 位;
  • 标记 - 1 位;
  • payload_type - 7 位;
  • sequence_number - 16 位;
  • 时间戳 - 32 位;
  • ssrc - 32 位;
  • 有效负载 - 变化;

我正在创建一个位列表:

    rtp_packet[0:2] = format(packet_data["version"], "b").zfill(2)
    rtp_packet[2:3] = format(packet_data["padding"], "b")
    rtp_packet[3:4] = format(packet_data["extension"], "b")
    rtp_packet[4:8] = format(packet_datas["csrc_count"], "b").zfill(4)
    rtp_packet[8:9] = format(packet_data["marker"], "b")
    rtp_packet[9:16] = format(packet_data["payload_type"], "b").zfill(7)
    rtp_packet[16:32] = format(packet_data["sequence_number"], "b").zfill(16)
    rtp_packet[32:64] = format(packet_datas["timestamp"], "b").zfill(32) # turi dideti po 160
    rtp_packet[64:96] = format(packet_data["ssrc"], "b").zfill(32)
    rtp_packet[96:128] = format(packet_data["csrc_list"], "b").zfill(32)
    rtp_packet[128:] = bin(int.from_bytes(packet_data["payload"].encode(), "big"))[2:]

然后通过创建的套接字发送这些字节。没用(结果如上)。然后我发现了这个PyRTP library结果与上面相同。

我是 Python 和所有这些数据包事物的新手,所以也许有人可以帮助我解决我做错的事情或我没有做的事情,Wireshark 仍然只将这些数据包视为 UDP,而不是 RTP?下图是我希望做的(这是用家里的 SIP 服务器完成的)。预先感谢您!

enter image description here enter image description here

最佳答案

RTP 是一种应用协议(protocol),它被封装在 UDP(网络协议(protocol))中,您可以使用 WireShark 验证您的数据包是否为 RTP 数据包,如下所示:https://en.wikiversity.org/wiki/Wireshark/IPv4_multicast

关于python - 使用Python创建RTP数据包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62041552/

相关文章:

python - 带标题的休息图像网格?

linux - 如何知道 Socket 客户端断开连接?

java - Java一对一消息广播套接字

python - 自动从csv文件中提取数据到特定的矩阵位置

python - PyLint/PyLint3 无法识别文档字符串

iPhone:使用来自套接字的数据更新 View

python - 在Docker上安装detectron2软件包

python - 生成列表的所有有序组合,其中每个组合包括所有项目

用于随机数生成的 Python pycrypto 库与 os.urandom

python - Ttk 主题设置