gpt4 book ai didi

python - 使用 Python 创建 RTP 数据包

转载 作者:行者123 更新时间:2023-12-03 12:02:42 25 4
gpt4 key购买 nike

我在大学做项目。我想要做的是我希望我的程序能够更改 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 位;
  • 序列号 - 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/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com