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:
- Dirección del servidor:
.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:
- Error de conexión:
- 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:
- Verifica el servidor TCP local:
- Comprueba la configuración de red:
- Prueba con otro puerto:
- Utiliza una herramienta de depuració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