【发布时间】:2020-05-27 11:02:42
【问题描述】:
我正在大学做项目。我想要做的是我希望我的程序能够更改 RTP 数据包有效负载中的位。我正在尝试创建一个简单的工具,将隐写术应用于 RTP 数据包的有效负载 - 首先它会“捕获”从我的计算机发送的 rtp 数据包,然后更改有效负载部分并将数据包进一步发送到目的地。我要做的第一件事(在学习时)是创建 RTP 数据包流。我以为我做到了,直到我检查了 Wireshark:
我们看到的只是UDP数据包(pythonsocket.SOCK_DGRAM)
我正在尝试通过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 服务器完成的)。提前谢谢!
【问题讨论】:
-
afaik RTP被封装成UDP包enter image description here
标签: python python-3.x sockets wireshark rtp