0

我正在尝试在 NAT 后面的两台计算机之间建立连接。我有第三台计算机可供这两台计算机访问。

我想使用 ICE(交互式连接建立)协议,但我在 Python 中找不到任何示例。我听说过pjsip,其中包括一个名为 的 C 库pjnath,但它也是用 C 编写的。

是否有任何工具可以在 Python 中实现它?如果没有,还有其他方法可以做我描述的吗?如果没有,如何在 Python 中启动 ICE 协议?

4

2 回答 2

0

PjSIP 有一个可以使用的 python 模块。

您可以在此处找到所需教程的详细信息和链接。

于 2014-10-26T07:50:04.057 回答
0

您可以使用以下纯 Python 库来建立 ICE 连接:

https://github.com/jlaine/aioice

这是同一进程中两个 ICE 端点的示例。在现实生活中,您需要一些信令方法来在两者之间交换候选人、用户名(“ufrag”)和密码(“pwd”)。

import asyncio

import aioice


async def connect_using_ice():
    conn_a = aioice.Connection(ice_controlling=True)
    conn_b = aioice.Connection(ice_controlling=False)

    # invite
    await conn_a.gather_candidates()
    conn_b.remote_candidates = conn_a.local_candidates
    conn_b.remote_username = conn_a.local_username
    conn_b.remote_password = conn_a.local_password

    # accept
    await conn_b.gather_candidates()
    conn_a.remote_candidates = conn_b.local_candidates
    conn_a.remote_username = conn_b.local_username
    conn_a.remote_password = conn_b.local_password

    # connect
    await asyncio.gather(conn_a.connect(), conn_b.connect())

    # send data a -> b
    await conn_a.send(b'howdee')
    data = await conn_b.recv()
    print('B got', data)

    # send data b -> a
    await conn_b.send(b'gotcha')
    data = await conn_a.recv()
    print('A got', data)

    # close
    await asyncio.gather(conn_a.close(), conn_b.close())


asyncio.get_event_loop().run_until_complete(connect_using_ice())
于 2018-02-23T17:09:47.140 回答