0

我正在尝试使用 DTLS 和 SIP 完成握手。该网站 [0] 告诉我,我需要向传入请求发送 SIP 响应,其中包含我的 SDP 文件和用于完成 DTLS 握手的指纹。我目前正在使用客户端 <--> 服务器模型。客户端正在请求调用,而我已经有了 RTP 数据包,但我需要在建立连接时将它们发送回客户端。我很难建立连接。

作为 DTLS 握手的参考,我有一个我在使用 webRTC 库的浏览器-浏览器调用期间使用wireshark 找到的数据包的屏幕截图。https://imgur.com/a/00bi7

我在哪里可以找到用于这些目的的好的 python 库?

1 ) Setup the DTLS handshake and encrypt my RTP packets to SRTP?

[0] https://www.rfc-editor.org/rfc/rfc5763

4

1 回答 1

0

对于实际的 SRTP 加密/解密,您可以使用 pylibsrtp:

https://pypi.python.org/pypi/pylibsrtp

DTLS 握手(产生 SRTP 主密钥)比较棘手,但 pyOpenSSL 应该很快就有必要的绑定来启用 SRTP 扩展:

https://github.com/pyca/pyopenssl/pull/734

一旦可用,您将能够提取生成密钥材料:

SRTP_KEY_LEN = 16
SRTP_SALT_LEN = 14

def get_srtp_key_salt(src, idx):
    key_start = idx * SRTP_KEY_LEN
    salt_start = 2 * SRTP_KEY_LEN + idx * SRTP_SALT_LEN
    return (
        src[key_start:key_start + SRTP_KEY_LEN] +
        src[salt_start:salt_start + SRTP_SALT_LEN]
    )

material = connection.export_keying_material(
    b'EXTRACTOR-dtls_srtp',
    2 * (SRTP_KEY_LEN + SRTP_SALT_LEN))

if is_server:
    srtp_tx_key = get_srtp_key_salt(material, 1)
    srtp_rx_key = get_srtp_key_salt(material, 0)
else:
    srtp_tx_key = get_srtp_key_salt(material, 0)
    srtp_rx_key = get_srtp_key_salt(material, 1)
于 2018-02-23T10:46:10.297 回答