Ayuda - Cómo agregar puertos TCPI y UPD

Iniciado por zikotik, 3 Julio 2013, 16:04 PM

0 Miembros y 1 Visitante están viendo este tema.

zikotik

Buenas qué tal, estoy haciendo una aplicación junto con un amigo en VBNET.
Y ahora necesitamos hacer un programa de consola que va a ser llamado mediante la aplicación de VBNET para agregar puertos TCP y UDP (éso lo manejo con argc y argv) con ciertos atributos...

archiv.cpp [tcp/udp] [nº puerto] [nombre]

(Obviamente el archivo.cpp estaría compilado a exe...)

La cuestión es que no sé cómo hacer para agregar puertos desde C++.
Leí acerca de la librería dos.h que tenía los comandos inport y outport, pero son sólo para enviar datos mediante puertos ya existentes (según lo que entendí), por lo tanto no me sirve de mucho...

Cómo puedo hacer ésto?
Gracias de antemano ;)

eferion

veo que no tienes las ideas muy claras.

.cpp es la extensión utilizada para los archivos de código fuente de c++... no es ejecutable de por si.

Si lo compilas y enlazas ( en windows ) se genera un archivo con extensión .exe que ese sí es ejecutable.

En cualquier caso tendrás alguna idea de c++ no?? o te has lanzado a la aventura ??

si te has lanzado a la aventura, empieza por cosas más sencillas o cambia de lenguaje. Empezar de primeras en c++ manejando estructuras y sockets no es la mejor forma de iniciarse en una aventura... y menos aún si ni tan siquiera sabes qué quieres hacer.

Es simple... si lo haces por diversión y aprender, te gustaría entender lo que estás haciendo hasta el punto de ser capaz de reproducirlo sin ayuda... si lo haces por obligación y quieres que otros lo hagan por ti... hay opciones de pago para los que no quieren esforzarse.

Aún así te voy a dar algunas ideas:

1. si pretendes abrir varios puertos en varias llamadas el método "app -parametros" no te va a funcionar porque por cada llamada crearás una nueva instancia del programa... cada copia del programa manejará los puertos que le hayas indicado en la llamada correspondiente.

2. En base al punto 1, una posibilidad es comunicarse entre las dos aplicaciones por sockets, empleando para ello un puerto conocido por ambas aplicaciones para entablar conversación y que se puedan enviar órdenes... como abrir otros puertos.

3. Si lo de los sockets no te va, se pueden enviar mensajes entre aplicaciones... pero es más engorroso e implica llamadas al sistema y procesos más difíciles de trazar.

4. No hay 4, al menos no de momento mientras no haya más información sobre la mesa.

zikotik

Cita de: eferion en  3 Julio 2013, 16:26 PM
veo que no tienes las ideas muy claras.

.cpp es la extensión utilizada para los archivos de código fuente de c++... no es ejecutable de por si.

Si lo compilas y enlazas ( en windows ) se genera un archivo con extensión .exe que ese sí es ejecutable.

En cualquier caso tendrás alguna idea de c++ no?? o te has lanzado a la aventura ??

si te has lanzado a la aventura, empieza por cosas más sencillas o cambia de lenguaje. Empezar de primeras en c++ manejando estructuras y sockets no es la mejor forma de iniciarse en una aventura... y menos aún si ni tan siquiera sabes qué quieres hacer.

Es simple... si lo haces por diversión y aprender, te gustaría entender lo que estás haciendo hasta el punto de ser capaz de reproducirlo sin ayuda... si lo haces por obligación y quieres que otros lo hagan por ti... hay opciones de pago para los que no quieren esforzarse.

Aún así te voy a dar algunas ideas:

1. si pretendes abrir varios puertos en varias llamadas el método "app -parametros" no te va a funcionar porque por cada llamada crearás una nueva instancia del programa... cada copia del programa manejará los puertos que le hayas indicado en la llamada correspondiente.

2. En base al punto 1, una posibilidad es comunicarse entre las dos aplicaciones por sockets, empleando para ello un puerto conocido por ambas aplicaciones para entablar conversación y que se puedan enviar órdenes... como abrir otros puertos.

3. Si lo de los sockets no te va, se pueden enviar mensajes entre aplicaciones... pero es más engorroso e implica llamadas al sistema y procesos más difíciles de trazar.

4. No hay 4, al menos no de momento mientras no haya más información sobre la mesa.

Lo de los sockets no me sirve de mucho porque necesito que los abra no temporalmente sino permanentemente, por lo que la idea es que estén abiertos aunque no esté el programa en ejecución.

Por cierto, puse archivo.cpp haciendo de cuenta que se lo llamaba como a un comando cualquiera, ya sé que tiene que estar compilado a exe sí o sí.

Y no, C++ lo estoy estudiando hace unos 2 o 3 meses más o menos.

Gracias por tu respuesta de todas formas. ;)

eferion

No tienes muy claros los conceptos sobre sockets. Me explico:

Que un puerto esté abierto significa que hay una aplicación escuchando por ese puerto... si la aplicación se cierra el puerto también.

Esto significa que un puerto no queda abierto indefinidamente porque si... son las aplicaciones las responsables de solicitárselos al sistema operativo y este puede adjudicárselo o denegárselo ( porque el puerto ya esté adjudicado a otra aplicación o sea un puerto reservado ).

Otra cosa diferente es abrir puertos en un router... abrir un puerto en un router significa que has creado una ruta en el router, de tal forma que todas las peticiones que lleguen a través de una interfaz determinada ( generalmente la de internet ) y por un puerto determinado se redirijan a una ip determinada ( generalmente el pc que va a hacer uso de ese puerto ).

Y luego podría aburrirte con varias horas de explicaciones sobre sockets, puertos, redes, paquetes y demás, pero creo que con esto te puedes hacer una idea de cómo funcionan los puertos y replantearte tu aplicación.

zikotik

Sí, creo que me expresé mal (como el ort....)
Me refería a los puertos que se agregan desde el firewall.

eferion

firewall físico o por software??

Si es físico tendrías que hacerte con la documentación que explique la forma de configurar ( mediante telnet, snmp, etc ) el firewall concreto que vayas a utilizar.

Si es por software... cada firewall tiene su propia interfaz, seguro que en internet vienen las instrucciones para los más comunes.

La parte que no entiendo es qué aporta preparar una aplicación que, a raiz de una instrucción recibida por una segunda, abra los puertos de un router... no sería más sencillo que la primera aplicación los abriese directamente?

zikotik

Cita de: eferion en  4 Julio 2013, 14:49 PM
firewall físico o por software??

Si es físico tendrías que hacerte con la documentación que explique la forma de configurar ( mediante telnet, snmp, etc ) el firewall concreto que vayas a utilizar.

Si es por software... cada firewall tiene su propia interfaz, seguro que en internet vienen las instrucciones para los más comunes.

La parte que no entiendo es qué aporta preparar una aplicación que, a raiz de una instrucción recibida por una segunda, abra los puertos de un router... no sería más sencillo que la primera aplicación los abriese directamente?


Básicamente llamo al archivo externo porque es un programa que funciona por comandos.

Pasa que estamos haciendo una shell para generar bots, y uno de esos comandos, hace que el bot abra los puertos tcp 80, 44405, 55901 y udp 8080, 55906, pero de tal forma que si el bot se cierra, estos puertos sigan abiertos.

(ahora que lo pienso... sí... tengo que usar sockets... creo que debí haber empezado a explicar la función exacta del programa desde un principio...)

eferion

jajajajajaja

si, dar una idea equivocada de lo que se intenta hacer suele dar malos resultados ;)