Cómo utilizar túneles ngrok tcp con C# Socket

Necesito conectarme con el servidor tcp local con ayuda de ngrok. He intentado conectarme así:

Socket _clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
_clientSocket.Connect(IPAddress.Parse(".tcp.ngrok.io"), 10543); // Port of tcp tunnel

Pero hay un problema, que no me está conectando.

Pregunta hecha hace 3 años, 5 meses, 0 días - Por scriptsorcerer


3 Respuestas:

  • Descargar el archivo ngrok del sitio web y comenzar con el comando:

    ngrok tcp (your port here)
    

    cuando lo inicie, después de la reenvío debe ver el dominio. copiarlo sin el tcp:// después de eso se abre cmd y escribe:

    ping (ngrok domain eg. 2.tcp.ngrok.io:69420 becomes 2.tcp.ngrok.io)
    

    para que el ping funcione realmente necesita eliminar el puerto después del dominio entonces en el cmd debe ver un ip, debe ver un ip en la salida. Copia este ip en la parte de la dirección ip del código donde se conecta al servidor. Seleccione el puerto como el puerto de dominio.

    Client.Connect(IPAddress.Parse("ip in the cmd output"), port of the ngrok domain);
    

    Creo que esto funciona, no totalmente seguro pero vale la pena intentarlo.

    Editar: Intenté lo que he enumerado anteriormente y la IP parece seguir cambiando de vez en cuando, todavía parece estar trabajando cada vez que cambia sin que yo actualice el ip dentro del código

    Respondida el Dec 16, 2020 a las 19:07 - por cyberjedi

    Votos positivos: 0 | Votos negativos: 0

  • El problema que estás experimentando puede ser debido a que ngrok no soporta la exposición de túneles TCP directamente, por lo que tendrás que utilizar una opción adicional para poder lograrlo, como la exposición de tus servicios a través de HTTP y luego utilizar websockets para conectar tu cliente C

    .

    Aquí te muestro un ejemplo de cómo podrías lograrlo:

    • Configura un túnel HTTP con ngrok para exponer tu servicio TCP local a través de un enlace HTTP:
    bash
    ngrok http 10543
    

    • En tu aplicación C

      , utiliza la biblioteca de websockets para conectarte a tu servicio a través del túnel ngrok:

    csharp
    using System;
    using System.Net.WebSockets;
    using System.Text;
    using System.Threading;
    using System.Threading.Tasks;

    class Program { static async Task Main() { using ClientWebSocket ws = new ClientWebSocket(); Uri uri = new Uri("wss://.ngrok.io");

    await ws.ConnectAsync(uri, CancellationToken.None);

    while (ws.State == WebSocketState.Open) { ArraySegment buffer = new ArraySegment(new byte[1024]); WebSocketReceiveResult result = await ws.ReceiveAsync(buffer, CancellationToken.None);

    string message = Encoding.UTF8.GetString(buffer.Array, 0, result.Count); Console.WriteLine(message); } } }

    Debes reemplazar <randomstring> con el identificador generado por ngrok en el enlace HTTP, y asegúrate de que tu aplicación TCP local está escuchando en el puerto 10543.

    Con este enfoque, podrás conectarte a tu aplicación TCP local a través del túnel ngrok utilizando websockets en tu aplicación C#. ¡Espero que esto te sea útil!

    Respondida el Dec 17, 2020 a las 19:06 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • Parece intentar solucionar el problema, revisemos el código paso a paso:

    • Creación del Socket:
    - `Socket` inicializado correctamente con los tipos de dirección, socket y protocolo.
    • Dirección del servidor:
    - Estás intentando conectarte a un servidor en `.tcp.ngrok.io` en el puerto `10543`. Asegurate de reemplazar `` con el número de puerto del túnel ngrok correcto.
    • Conexión al servidor:
    - `Connect()` intenta establecer una conexión con el servidor.
    • Error de conexión:
    - Si la conexión falla, puede deberse a varias razones:
    • El túnel ngrok no está configurado o no está en ejecución.
    • El servidor TCP local no está escuchando en el puerto especificado (10543).
    • Hay un problema de firewall o configuración de red que bloquea la conexión.

    Para solucionar el problema, intenta lo siguiente:

    • Verifica la configuración de ngrok:
    - Asegurate de que el túnel ngrok esté configurado correctamente y en ejecución.

    • Verifica el servidor TCP local:
    - Confirma que el servidor TCP local está escuchando en el puerto 10543.

    • Comprueba la configuración de red:
    - Asegurate de que no haya firewalls o problemas de configuración de red que bloqueen la conexión.

    • Prueba con otro puerto:
    - Intenta conectarte a un puerto diferente en el mismo servidor ngrok.

    • Utiliza una herramienta de depuración:
    - Considera usar una herramienta de depuración como Wireshark o tcpdump para analizar el tráfico de red y verificar si hay algún problema de conexión.

    Si aún tienes problemas para conectarte, proporciona más detalles sobre tu configuración de ngrok, servidor TCP local y configuración de red.

    Respondida el Dec 17, 2020 a las 19:14 - por Gemini

    Votos positivos: 0 | Votos negativos: 0