Test Foro de elhacker.net SMF 2.1

Programación => .NET (C#, VB.NET, ASP) => Programación General => Programación Visual Basic => Mensaje iniciado por: elsita en 27 Agosto 2006, 06:38 AM

Título: Hola
Publicado por: elsita en 27 Agosto 2006, 06:38 AM
Bien les explico la situación, estoy creando un programa muy sencillo pero no tanto, bien quiero que cuando el usuario del programa haga click en un command button el programa se quede a la escucha de que cambie la ip, cuando cambie la ip que agregue una linea al registro que seria la siguiente:

[HKEY_LOCAL_MACHINE\SOFTWARE\D2Server\D2GS]
@="Diablo II Close Game Server"
"D2CSIP"="200.200.200.200"

"D2DBSIP"="200.200.200.200"


donde dice 200.200.200.200 creo que es mas que obvio que ahi va a ir la ip, bien espero que me puedan ayudar, desde ya Gracias
Título: Re: Hola
Publicado por: soplo en 27 Agosto 2006, 12:10 PM
Hola Elsita

Primero bienvenida

Segundo que aquí no hacemos software a medida. Lo que pides no es nada del otro mundo, por aquí tienes mucha información de como acceder al registro y comprobar si te han cambiado la ip es tan fácil como guardar socket.localip en un string y luego con un timer comparar el string y el socket.localip a ver si son distintos.

Postea lo que has hecho y se te puede corregir, pero no esperes que te lo hagan.

Un saludo
Título: Re: Hola
Publicado por: elsita en 27 Agosto 2006, 16:08 PM
Hola, primero que nada gracias, pero yo nunca pedi que me hicieran el software nada más que me den una idea de como hacerlo, es que yo ya tenia parte del codigo lo unico que me faltaba era como hacer eso que dije anteriormente ;) :) Bye
Título: Re: Hola
Publicado por: elsita en 27 Agosto 2006, 16:56 PM
yo lo que hice fue así Label2.Caption = Winsock1.LocalIP
pero esto me da la ip "192.168.x.x"
Título: Re: Hola
Publicado por: soplo en 27 Agosto 2006, 18:42 PM
Pues ya está

Declarar una variable de formulario
Dim SwPoneraLaEscucha as boolean

'El valor de esa variable es true cuando deseamos que se ponga a comprobar la ip)
sub command1_click()
   SwPonerAlaEscucha=true
end sub


'Comprobar cada intervalo de tiempo si la variable está a true (esto es si debe comprobar la ip y en su caso comprobar
sub timer1_timer()
   if not SwPoneraLaEscucha then
      exit sub
   endif

   if winsock1.localip<>label2 then
      poner_a_la_escucha()
      Agregar_A_Registro()
   endif
end sub
Título: Re: Hola
Publicado por: elsita en 27 Agosto 2006, 21:23 PM
ok tengo otro problema cuando quiero agregar por ejemplo la 2da linea miren:

shell ("reg add /f @="Diablo II Close Game Server"")
termina en comillas y no me deja como puedo hacer?
Título: Re: Hola
Publicado por: soplo en 28 Agosto 2006, 20:09 PM
Hola
shell ('reg add /f @="Diablo II Close Game Server"')

;D
Título: Re: Hola
Publicado por: WarGhost en 28 Agosto 2006, 20:18 PM
Creo que eso no funciona, usa esto :

shell "reg add /f @=""Diablo II Close Game Server"""
Título: Re: Hola
Publicado por: soplo en 28 Agosto 2006, 20:20 PM
Si funciona, y lo tuyo también
;D
Título: Re: Hola
Publicado por: WarGhost en 28 Agosto 2006, 20:46 PM
ha mi por lo menos no me funciona  :P:

(http://img116.imageshack.us/img116/3590/dibujopv1.jpg)
Título: Re: Hola
Publicado por: Ironhorse en 28 Agosto 2006, 23:37 PM
lo que viene despues de la comilla simple el compilador la interpreta como comentario, por eso el error
Título: Re: Hola
Publicado por: elsita en 29 Agosto 2006, 02:27 AM
SwPonerAlaEscucha As Boolean
Private Sub Command1_Click()
   SwPonerAlaEscucha = True
End Sub

Private Sub Form_Load()

End Sub

Private Sub forma_Click()
Form3.Show
End Sub

Private Sub Label2_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Label2.Caption = Winsock1.LocalIP
End Sub

Private Sub Label4_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Label4.Caption = Winsock1.LocalHostName
End Sub

Private Sub Label6_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Label6.Caption = Winsock1.RemoteHost
End Sub

Private Sub sobre_Click()
Form2.Show
End Sub

Private Sub timer1_timer()
   If Not SwPonerAlaEscucha Then
   GoTo timer1_timer
   End If

   If Winsock1.LocalIP <> Label2 Then
Set ws = CreateObject("WScript.Shell")
ws.RegWrite "HKEY_LOCAL_MACHINE\SOFTWARE\D2Server\D2GS", " & Chr(34) & ""@=Diablo II Close Game Server"" & Chr(34) & """
ws.RegWrite "HKEY_LOCAL_MACHINE\SOFTWARE\D2Server\D2CS", "" & Chr(34) & "" & Winsock1.LocalIP & "" & Chr(34) & ""
ws.RegWrite "HKEY_LOCAL_MACHINE\SOFTWARE\D2Server\D2DBS", "" & Chr(34) & "" & Winsock1.LocalIP & "" & Chr(34) & ""
   End If
End Sub
End Sub

así quedo :)
Título: Re: Hola
Publicado por: elsita en 29 Agosto 2006, 02:29 AM
ahh me olvidaba yo puse que para que mueva el mouse se muestre la info, no ahi alguna forma de que muestre la winsock.localip sin tener que hacer alguna opcion con el mouse sobre la label?
Título: Re: Hola
Publicado por: soplo en 29 Agosto 2006, 20:16 PM
Hola

¿Por qué esto?
If Not SwPonerAlaEscucha Then
   GoTo timer1_timer
   End If


en vez de esto
If Not SwPonerAlaEscucha Then
   exit sub
End If


Citarno ahi alguna forma de que muestre la winsock.localip sin tener que hacer alguna opcion con el mouse sobre la label?
Pues pon winsock.localip en otro sitio en vez de en label2.mousemove.

Yo lo pondría dentro de la rutina de poner a la escucha. Esto es allí donde pones winsock.listen pones label2=winsock.localip

Un saludo

Título: Re: Hola
Publicado por: elsita en 31 Agosto 2006, 01:21 AM
Hola, tengo un ultimo problema, el Label2.Caption =  Winsock1.localip me da la ip 192.168.x.x pero quiero que me de la que me da el Isp por que si no el programa no serviria de nada.
Título: Re: Hola
Publicado por: soplo en 31 Agosto 2006, 16:11 PM
Hola
Winsock.localip te da la ip local. Lo que tu quieres no es la ip local, es la ip pública y esa no la puedes obtener fácilmente. Es fácil desde fuera, pero no lo es desde dentro.

No veo como puedes hacer eso a menos que la conexión entrante de alguna forma deje esa información en algún sitio que puedas leer.

Un saludo
Título: Re: Hola
Publicado por: WarGhost en 31 Agosto 2006, 16:16 PM
Si es Fácil simplemente con los comandos mid, left, right, InStr la ip publica esta aquí:

shell "ipconfig /all > C:\ipconfig.txt"

;) Salu2, WarGhost
Título: Re: Hola
Publicado por: WarGhost en 31 Agosto 2006, 16:36 PM
Aquí pongo una función que acabo de hacer que lo saca:

Public Function IPPublica() As String
Dim data As String
Dim data2 As String

If Dir("C:\ipconfig.txt") = "" Then Kill "C:\ipconfig.txt"
Shell "ipconfig /all > C:\ipconfig.txt"

Open "C:\ipconfig.txt" For Binary As #1
data = Space(LOF(1))
Get #1, , data
Close #1

data = Mid(data, InStr(1, data, "Servidores DNS . . . . . . . . . .: "), Len(data))
data2 = InStr(1, data, "Servidores DNS . . . . . . . . . .: ")
IPPublica = Trim(Mid(data, data2 + 36, InStr(1, data, vbCrLf) - 38))
End Function


Es algo cutre pero funciona :P
Título: Re: Hola
Publicado por: soplo en 31 Agosto 2006, 21:32 PM
Hola WarGhost
Eso no es la ip pública. De hecho la ip pública no reside en tu ordenador, reside en tu router y para conocerla puedes ir a alguna página que te lo diga (p. ej. www.showmyip.com) o utilizar algún proxy que te permita saber la variable ip-client.

Lo que tu crees que es ip pública es la puerta de enlace que es la ip de tu router.

Un saludo
Título: Re: Hola
Publicado por: WarGhost en 31 Agosto 2006, 22:48 PM
Si cierto Sorry Aquí dejo un código que si lo hace pero lo malo es que necesitas un control winsock también se puede hacer con el inet pongo las dos formas:

Winsock:
Private Sub Form_Load()
ws.Close
ws.Connect "ip1.dynupdate.no-ip.com", 80
End Sub

Private Sub ws_Connect()
ws.SendData "GET / HTTP/1.0" & vbCrLf & _
"Accept: */*" & vbCrLf & _
"User-Agent: IPLen(By WarGhost)" & vbCrLf & _
"Host: ip1.dynupdate.no-ip.com" & vbCrLf & vbCrLf
End Sub

Private Sub ws_DataArrival(ByVal bytesTotal As Long)
Dim data As String
ws.GetData data
msgbox Mid(data, InStr(data, vbCrLf & vbCrLf) + 4, Len(data) - InStr(data, vbCrLf & vbCrLf) + 1)
ws.Close
End Sub


INET:
msgbox Inet1.OpenURL("ip1.dynupdate.no-ip.com")

Si el codigo del INET es mas facil xDDDD.

;D Salu2, WarGhost