AsyncSSH ofrece reenvío TCP dinámico mediante forward_socks(). Unha aplicación que xa dispón de AsyncSSH pode crear un receptor SOCKS local sobre unha conexión SSH:

import asyncio
import asyncssh

async def main():
    async with asyncssh.connect(
        'jump.example.net', username='operator'
    ) as connection:
        listener = await connection.forward_socks('127.0.0.1', 1080)
        await listener.wait_closed()

asyncio.run(main())

O servidor SSH e a conta son exemplos. Aplícase a comprobación habitual de claves de host de AsyncSSH. O servidor debe permitir o reenvío TCP solicitado. Como equivalente na liña de comandos, o reenvío dinámico local de OpenSSH usa a mesma dirección de SSH ao destino.

Os clientes locais xa poden usar 127.0.0.1:1080 como o seu punto final SOCKS. Cada solicitude SOCKS indica o seu destino; o servidor SSH abre a conexión TCP saínte correspondente. A aplicación non precisa executar un descargador remoto para cada URL.

A espera mantén a función asíncrona dentro do ámbito da conexión. Volver de inmediato tras crear o receptor sairía dese ámbito e pecharía a conexión que o sostén. Unha aplicación asyncio maior pode manter esta conexión aberta mentres executa as súas outras tarefas no mesmo bucle de eventos.

Artigos relacionados