Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: Krnl64 en 18 Abril 2006, 17:43 pm



Título: Conectar 2 programas por medio de internet
Publicado por: Krnl64 en 18 Abril 2006, 17:43 pm
Hola a todos.

Vereis, tengo 2 programas 1 server y 1 cliente.

El Server tiene 1 base de datos y el cliente se tiene que conectar a el para actualizarla.

En lan si se hacerlo, pero como lo hago para que puedan conectarse ambos programas desde  fuera de lan ?

Mi problema es solo como conectarlos. El resto de code no tengo problemas.

Abro los puertos y todo, pero no se que tengo que hacer para que se conecten.

Agradezco consejos, alguna idea de como hacerlo, o si alguien postea code pues gracias

Salu2







Título: Re: Conectar 2 programas por medio de internet
Publicado por: Cicklow en 18 Abril 2006, 18:13 pm
el problema es este, en internet, podes tener ip dinamica, asike lo que pasa es que tu ip cambia, podes crearte una cuenta en NOIP, y de esta manera podras usar el programa trankilamente, si tenes IP fija tendras que ver si el router (si tenes), te deja acceder desde internet!!

Si el programa funciona bien, en la red, funciona bien en internet, solo tenes que preveer lo de las ip dinamicas!


Título: Re: Conectar 2 programas por medio de internet
Publicado por: Robokop en 18 Abril 2006, 19:13 pm
El codigo es igual desde LAN o fuera de lan como siempre el server escucha y el cliente conecta es todo tal vez puede ser lo que te dijo cicklow tambien fijate que no haya ningun dispositivo de seguridad que este bloqueando el trafico


Título: Re: Conectar 2 programas por medio de internet
Publicado por: Krnl64 en 18 Abril 2006, 20:35 pm
Gracias por la ayuda.

Como me decis el code es el mismo para afuera que para adentro.

Entonces me falla lo de la IP dinamica.

Los dispositivos de seguridad no son problema.

Como hago que pille la ip ?

A traves de No ip ?

Gracias



Título: Re: Conectar 2 programas por medio de internet
Publicado por: NYlOn en 18 Abril 2006, 22:15 pm
En la sección Troyanos y virus hay un manual que explica detalladamente los pasos para poder usar no-ip.

Luego tu IP pasaria a ser la creada por no ip (por ejemplo: tuip.no-ip.info) y esa es la que tendrias que poner en tu proyecto.


Título: Re: Conectar 2 programas por medio de internet
Publicado por: Krnl64 en 18 Abril 2006, 23:40 pm
Ok.

Por No-IP averiguo ambas IPS

Pero sigo teniendo el mismo problema.

Aun sabiendo las 2 IPs que me keda que hacer ?

Redireccionar a 1 proxy o algo para poder conectar ?




Título: Re: Conectar 2 programas por medio de internet
Publicado por: Cicklow en 19 Abril 2006, 01:15 am
si el programa esta funcionando bien no tenes porke tener problemas!!!, podes fijarte bien en la sección del troyano enn VB, este te dara una idea mas clara, pero tiene que funcionar!!!

fijate si tenes el XP que el firewalll de windows no te este blokeando!!


Título: Re: Conectar 2 programas por medio de internet
Publicado por: Krnl64 en 19 Abril 2006, 02:36 am
Vaya !!

Casi funciona.

Uso No-IP

Me da el siguiente error:  error 10061 Connection is forcefully
Rejected

Alguien sabe por que ?

Dejo claro que intento conectar 2 aplicaciones a traves de internet

mi codes son estos:

Código:

'''Cliente
Winsock1.RemoteHost = "xxx.no-ip.org"
  Winsock1.RemotePort = 1066
  Winsock1.Connect

Código:

''Servidor
Winsock1.LocalPort = 1066
Winsock1.Listen



He abierto el puerto del router y el firewall pero me da el mismo error.

Ojo !! Tambien corro a la vez el DUC, que no se me olvida

No se donde esta el fallo.

Ayuda please !!!

Gracias



Título: Re: Conectar 2 programas por medio de internet
Publicado por: Cuasar en 19 Abril 2006, 04:37 am
hola voy a intentar ayudar por lo que lei te conectas a Internet a través de un ruter.

la falla puede estar.. en que cuando el cliente llama a ti dir de no ip, esta Web lo redirecciona a tu ip actual, el caso es...
que esa ip corresponde a tu ruter, y el servidor de tu programa no se esta corriendo en el ruter, si no que lo estas corriendo en una pc con una ip privada. si es este el caso lo único que debes hacer es una derivación de puertos.

por ejemplo si tu aplicación cliente llama a xxx.no-ip.org al puerto 1066 hace que tu ruter derive esa llamada al puerto 1066 de la pc en la que corres el servidor.

no te olvides que el ruter es interno entre tu red pribada  e Internet solo hace NAT por la boca wan del ruter.

espero puedas solucionarlo.
salu2.


Título: Re: Conectar 2 programas por medio de internet
Publicado por: Krnl64 en 19 Abril 2006, 04:50 am
Por favor explicame mejor lo de derivar los puertos.

O igual no se me entiende lo que pregunto.

En LAN seria asi:

------                --------
PC1  -------------> PC2       

Server              Cliente

Server:
Abro puerto 1066
Escucho

Cliente:
Establezco puerto 1066
Conecto


Quiero conectar ambas aplicaciones mediante esto:


                           INTERNET

---------              -------------                  -------------
Servidor  --------->  No IP    ---------------> Cliente


Igual no lo hago bien.

Pongo el Server a la escucha por el puerto 1066

Conecto el Cliente a No-IP por el puerto 1066

Y aqui me da el error

¿Cómo tengo que hacer la conexion ?


A ver si alguien me rescata de este pozo sin fondo .


Gracias.


Título: Re: Conectar 2 programas por medio de internet
Publicado por: Cuasar en 19 Abril 2006, 21:05 pm
hola bueno primero confirmame como te conectas a internet...
osea...   vos tenes una lan, perfecto.

estas pc como se conectan a internet?.

el tema es asi ?

                                           pc1
internet-------------router       pc2
                                           pc3
 
o asi?


                                                              pc2
internet---------------pc1 --------- router     pc3



te cuento existe un sistema de traduccion llamado NAT este sistema se usa para compartir internet en una red pero se puede hacer de muchas formas distinta.

los routers (algunos) traen esta opcion de hacer NAT.

si tu conexión es la primera que intente graficar mas arriba el que esta haciendo NAT es el router esto significa que cuando tu clinte llama a la ip el que contesta es el ruter y el ruter por mas que tenga el puerto 1066 a la escucha, no tiene nada que responderle a tu cliente ya que no tiene en soft de tu aplicacion respondiendo.

solucion a esto?

entras en la configuracion de tu router y depende que router sea te fijas en la opcion de port forwarding  capaz que en tu ruter tenga algun otro titulo pero el sentido de la frase es = osea traspado de peticiones de puertos.
con esto el router cuando escucha que alguien llama a su puerto 1066 lo que hace es chiflarle a la pc que vos espesifiques osea le dice... che... tengo un fulano que me pide no se que a mi puerto 1066, te lo paso y atendelo vos).
jeje fue la forma mas facil que se me ocurrio para que entiendas de que se trata. 
si no le configuras esto a tu router lo que hace es desechar el pedido ya que no puede responderlo.

"Ahora" si tu configuracion es la segunda seguramente que existe algun problema en la aplicacion. pero si por LAN funciona fijate que protocolo usas para la conexión si en una lan en protocolo UDP puede funcionar bien pero en internet te conviene TCP/IP ya que el UDP no controla la entrega y si algun frame se pierde en el camino nadie se entera.

bueno espero que puedas solucionar tu problema
salu2



Título: Re: Conectar 2 programas por medio de internet
Publicado por: Krnl64 en 20 Abril 2006, 01:23 am
Citar
Creo que no se me entiende

Conexion Servidor ------> Cliente
Mas conocida como conexion inversa lo que hace es que el cliente abre un puerto y el server se conecta atreves de ese puerto con una ip definida antes de enviarse el server


El esquema de conexion es este:


-----             -------          ------
LAN1----------NO-IP--------LAN2

Como se consigue la conexion ?

El server se conecta a NO-IP y el cliente tambien ?

Gracias por el interes











Título: Re: Conectar 2 programas por medio de internet
Publicado por: RED_HORSE en 20 Abril 2006, 02:51 am
  no lo que se conecta al no ip es el cliente y otra cosa que puede ser es que pusiste mal tus datos en el duc


Título: Re: Conectar 2 programas por medio de internet
Publicado por: Cuasar en 20 Abril 2006, 02:56 am
Krnl64  aver si nos entendemos.

olvidate por un segundo de no-ip y de tu aplicacion.

por lo que veo esto es un problema de comunicacion en lo que se denomina capa 2 del modelo OSI

voy a tratar de ser bien claro, cuando vos montas tu aplicacion de server en una pc, esta lo que hace es poner el puerto 1066 "(SOLO DE ESA PC)" a la escucha de peticiones. esto significa que solo en puerto 1066 "(DE ESTA PC)" responde a tu cliente.  si esta pc tiene una direccion IP privada (osea que pertenese a una red interna) no es visible desde internet. por eso es importante que describas de que forma te conectas a internet.

si te conectas con una PC con la que compartis internet a otras tenes que montar tu server en esa pc que es la que tiene la IP publica.
IP Publica = es visible en internet. ej 201.xxx.xxx.xxx
IP Privada = no es visible en internet. ej 192.168.0.1/2/3/4/5etc

para poder ayudarte decime como esta armada tu red, osea...
tenes una pc a la cual le conectas el modem ADSL o CABLEMODEM y la linea de telefono va a este modem?

o la linea de telefono va conectada a un router a donde conectas las demas pc?

por mas que pienses que no es importante esto es un punto clave para lograr la comunicacion por internet.

espero tu respuesta.
salu2


Título: Re: Conectar 2 programas por medio de internet
Publicado por: Krnl64 en 20 Abril 2006, 03:48 am
Citar
A ver si nos entendemos
Parece que lo voy pillando

Perdona por ser tan duro de moyera, pero es que segun he leido, la conexion inversa atraviesa routers, firewalls, etc

Mi objetivo es poder conectar ambos programas por internet desconociendo como estan montadas ambas redes

Pero dejo claras mis intenciones, NO ES 1 TROYANO

Quiero conectar ambas aplicaciones para poder manipular una base de datos.

Ahora, la red esta montada de esta manera:

-------          ------           ----------          ---------        -------
Router------- LAN1--------INTERNET--------Router--------LAN2

Son los Router quien proveen a las LAN  de INTERNET


Como bien dices, cada equipo posee 1 ip publica (Visible desde internet) y otra ip privada (ip de LAN)

Bien, ahora el problema de la conexion.

Quiero conectar 1 equipo de LAN1 a otro de LAN2.

Lo que debo hacer es conectar ambas IPs publicas (eso creo que has intentado explicarme) y creo que ya se donde tengo el problema.


Lo intento hacer asi:


Server:

Se conecta a mi dominio de no-ip ( por ej: xxx.no-ip.org)
Por el puerto x
(Creo que esto esta bien, porque se conecta a mi IP publica)



Cliente:

Lo pongo en escucha por el puerto x
Le digo que acepte cualquier solicitud entrante

Creo que el problema esta aqui.

Tengo puesto este code:

Código:

Private Sub client_ConnectionRequest (ByVal requestID As Long)
  ' Comprueba si el estado del control es cerrado.
  ' De lo contrario, cierra la conexión antes de
  ' aceptar la nueva conexión.
  If client.State <> sckClosed Then
   Client.Close
   Client.Accept requestID
   end if
end sub


¿Que he de hacer para que el cliente vea la peticion de fuera de LAN y la acepte ?

Espero que se me haya entendido o haberlo entendido yo lo que se me queria decir

Muchas Gracias



















Título: Re: Conectar 2 programas por medio de internet
Publicado por: Gangrel en 20 Abril 2006, 06:30 am
valla que desmadre. Aver si no ago esto mas rebuelto.

scrngs tiene reazon en todo lo que te a dicho pero puede ser que por que usa muchos terminos tecnicos no le entiendas bien.

1-La conexion Inversa NO brica los routers

estoy casi seguro que tu problema es ese. Has lo que te diga y te conectaras con exito.

Primero la estructura de la conexion.

Pc1deLan1---RouterdeLan1---INTERNET---RouterdeLan2---Pc1deLan2

Direcciones IP en la LAN
Pc1deLan1       127.1.0.2
RouterdeLan1   127.1.0.1
Pc1deLan2        127.1.0.2
RouterdeLan2   127.1.0.1

Direcciones IP en Internet
RouterdeLan1    200.65.87.201
RouterdeLan2    200.65.98.187

Suponiendo que tenemos el Servidor de tu aplicacion en Pc1deLan1 y el cliente en pc1deLan2.

En el cliente (Pc1deLan2) no hay ningun problema simplemente en tu codigo de visual le dices que se conecte a la direccion IP publica de RouterdeLan1 (200.65.87.201) o tu dominio de No-IP eso parece que esta claro.

En el servidor es donde esta el truco.
1-Con tu codigo de visual pones a Pc1deLan1 a la escucha en el puerto 1066.
2-Como el cliente no esta conectando directamente a Pc1deLan1 sino a RouterdeLan1 (200.65.87.201) le tienes que decir al router que todas las conexiones que le lleguen de internet al puerto 1066 se las pase a Pc1deLan1.

A esto se le llama Mapear/Redireccionar puertos y para lograrlo tienes que hacer lo siguiente.

En la maquina Pc1deLan1 le das click a "Menu Inicio" despues le das click a "Ejecutar" escrives cmd (en windows XP/2000) o command (en windows 98/95) ya en la consola de comandos del MS-Dos escrives "ipconfig" (xp/2000) o winipcfg (98/95) te apareceran una lista de direcciones IP, buscas el termino que diga "puerta de enlace" o algo similar y anotas la direccion IP que aparezca como dicha puerta de enlase.

Esa es la direccion ip en la LAN del RouterdeLan1 suponiendo en este ejemplo 127.1.0.1.

Despues te vas a tu navegador IE o Mozilla o el que tengas instalado y en la barra de direcciones escrives la ip del router.

Si todo a salido bien estaras en la configuracion del RouterLan1 tienes que buscar alguna opcion de mapeo de puerto o redireccionamiento de puertos donde le tienes que configurar que todo paquete y peticion de conecion sobre el puerto 1066 lo redireccione a Pc1deLan1 (127.1.0.2) Los pasos de configuracion del router no los pongo por que varian dependiendo del router.

Con el RouterdeLan1 configurado para que redireccione el puerto 1066 la conexion debe funcionar.

Cualquier duda posteala


Título: Re: Conectar 2 programas por medio de internet
Publicado por: moe88 en 20 Abril 2006, 11:16 am
una cosita, tienes puesto el conexion request en el cliente????

el que acepta la conexion deberia ser el server... o es que a tu server le llamas client??

Private Sub client_ConnectionRequest (ByVal requestID As Long)
  ' Comprueba si el estado del control es cerrado.
  ' De lo contrario, cierra la conexión antes de
  ' aceptar la nueva conexión.
  If client.State <> sckClosed Then
   Client.Close
   Client.Accept requestID
   end if
end sub


por otro lado ese " if "  ahi, nu se nu se.. yo no lo pondria


Título: Re: Conectar 2 programas por medio de internet
Publicado por: Krnl64 en 20 Abril 2006, 12:39 pm

DIOS QUE LIO !!


Les voy a postear el code y todo lo que he hecho hasta ahora

a ver si por fin consigo que esto funcione.

Les agradezco toda su ayuda.


Bueno, al grano.

Lo 1º que he hecho a sido mapear el puerto 1066 de mi router
(creo que se refiere a abrirlo)

2º corro el DUC

3º Ejecuto ambos programas

Los codes son estos:

Servidor:

Código:

Private Sub Command1_Click()
End
End Sub

Private Sub Form_Load()
Ws.LocalPort = 1066
Ws.RemoteHost = "xxx.no-ip.org"
Ws.Listen
End Sub

Private Sub Timer1_Timer()
If Ws.State <> 7 Then
Label1.Caption = "Desconectado"
Ws.Close
Ws.Connect
Else
Label1.Caption = "Conectado"
End If
End Sub


Private Sub Ws_ConnectionRequest(ByVal requestID As Long)
   Client.Close
   Client.Accept requestID
End Sub



Cliente

Código:

Private Sub Command1_Click()
End
End Sub

Private Sub Form_Load()
Ws.RemotePort = 1066
Ws.RemoteHost = "xxx.no-ip.org"
Ws.Connect
End Sub


Private Sub Timer1_Timer()
If Ws.State <> 7 Then
Ws.Close
Ws.Connect
End If
End Sub


Al correr ambos programas me sale que el estado de la conexion es SYN_SENT

En ambos routers esta mapeado el puerto 1066

¿Que es lo que falla ?

















Título: Re: Conectar 2 programas por medio de internet
Publicado por: moe88 en 20 Abril 2006, 14:30 pm
Private Sub Form_LOad()
ws.close
ws.localport = 1066
ws.listen
End sub

Private Sub ws_Connect()
label1.caption = "conectado"
End Sub



Cliente:

Private Sub Form_Load()
Ws.RemotePort = 1066
Ws.RemoteHost = "xxx.no-ip.org" '(que es la no-ip del server)
Ws.Connect
End Sub

y en todo caso, si quieres que si falla se reconecte en ws_error pon
ws.close
ws.connect



Título: Re: Conectar 2 programas por medio de internet
Publicado por: Krnl64 en 21 Abril 2006, 02:48 am

 Moe88 donde estan ahora los fallos ?

Sigo sin poder conectar.

Por favor algun ejemplo de Conexion inversa que rule por internet

Gracias


Título: Re: Conectar 2 programas por medio de internet
Publicado por: NYlOn en 21 Abril 2006, 03:06 am
Cambia las lineas:
Código:
If Ws.State <> 7 Then
por
Código:
If Ws.State <> 7 and Ws.State <> 6 Then

Si tenes el timer con un intervalo bajo y no tenes en cuenta el estado 6 ('Conectando...') el socket nunca terminaria de conectar ya que le mandas la accion de nuevo. No se si sera este el problema, pero podes probar.

Espero que te sea de ayuda, saludos.-


Título: Re: Conectar 2 programas por medio de internet
Publicado por: Krnl64 en 21 Abril 2006, 17:26 pm


GRACIAS A TODOS, MUCHAS GRACIAS



Aparte de algun fallo en el code, no me conectaban los programas porque intentaban conectarse a la misma IP.

Ya lo he solucionado.

A continuacion, les pongo el code que ya funciona.

Es por si a alguien le hace falta.



Antes de nada sigan estos pasos:


Abrir el puerto que se vaya a utilizar en el router que se vaya a correr el servidor. (opcional)

Crearse 1 no-ip

Instalar y correr el DUC.

Activar tu dominio en el DUC (Carita sonriente)

Correr el servidor en tu pc

Correr el Cliente en el pc remoto

Ya esta !!


Ambos programas pueden mejorarse, por ejemplo que soporten varios protocolos / varias conexiones

Y porsupuesto la funcionalidad de ambos programas

Eso lo dejo para ustedes

1 Observacion, en el cliente sera necesario emular el control Winsock (con api) porque el no hacerlo significa arriesgarse a que si el pc remoto no tiene el control, esto no funcione.

Ahora los codes:

Código:
''''
''''  Cliente
''''

Private Sub Form_Load()
Ws.RemotePort = 1066
Ws.RemoteHost = "tudominio.no-ip.org" '' aki tu dom no-ip
Ws.Connect
End Sub

Private Sub Timer1_Timer()
If Ws.State <> 7 And Ws.State <> 6 Then
Ws.Close
Ws.Connect
Else
Label1.Caption = "Has conectado con el Host Remoto"
End If
End Sub


Código:
''''
'''' Servidor
'''
Private Sub Form_Load()
Ws.Close
Ws.LocalPort = 1066
Ws.Listen
End Sub

Private Sub Timer1_Timer()
If Ws.State <> 7 And Ws.State <> 6 Then
Label1.Caption = "Desconectado"
Ws.Close
Ws.Listen
Else
Label1.Caption = "Conectado"
End If
End Sub

Private Sub Ws_ConnectionRequest(ByVal requestID As Long)
   Ws.Close
   Ws.Accept requestID
End Sub