如何使用ICE协议

问题描述:

我试图在NAT之后的两台计算机之间建立连接。我有第三台可以通过这两台计算机访问的计算机。如何使用ICE协议

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

是否有任何工具可以在Python中生成它?如果没有,是否有另一种方法来做我描述的?如果不是,如何在Python中启动ICE协议?

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

你可以找到详细信息和链接到需要的教程here

您可以使用下面的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())