Как использовать протокол ICE

Я пытаюсь установить соединение между двумя компьютерами за NAT. У меня есть третий компьютер, который доступен этим двум.

Я хотел бы использовать протокол ICE (Interactive Connectivity Establishment), но я не могу найти ни одного примера в Python. Я слышал о pjsip, которые включают в себя библиотеку C под названием pjnath, но это также написано на C.

Есть ли инструменты, чтобы сделать это в Python? Если нет, есть ли другой способ сделать то, что я описал? Если нет, то как запустить протокол ICE в Python?

2 ответа

PjSIP имеет модуль Python, который вы можете использовать.

Вы можете найти детали и ссылку на необходимые уроки здесь.

Вы можете использовать следующую библиотеку только для 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())
Другие вопросы по тегам