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

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


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

Desconectado Desconectado

Mensajes: 163



Ver Perfil
API Winsok 32
« en: 29 Abril 2012, 05:29 am »

Hola como estoy enfermo no puedo hacer nada estoy en la  pc jaja, me puse a boludear con winsock y vi como 3 ejemplos de winsock32 ,  y decidí aprender mas de las apis y me puse a jugar  tengo este codigo, pero tengo problema en dejarlo statico en memoria para que llame a la funciones correspondientes (depaso dejamos el surce si lo termino con exito)
* se conecta con exito, y envia datos con exito , el problema es  hacer la funcion de descarga,

Código
  1. Private Declare Function htons Lib "wsock32.dll" (ByVal hostshort As Long) As Integer
  2. Private Declare Function Connect Lib "wsock32.dll" Alias "connect" (ByVal s As Long, addr As SOCKADDR, ByVal namelen As Long) As Long
  3. Private Declare Function Send Lib "wsock32.dll" Alias "send" (ByVal s As Long, buf As Any, ByVal buflen As Long, ByVal Flags As Long) As Long
  4. Private Declare Function Socket Lib "wsock32.dll" Alias "socket" (ByVal af As Long, ByVal s_type As Long, ByVal protocol As Long) As Long
  5. Private Declare Function DestroyWindow Lib "user32.dll" (ByVal hWnd As Long) As Long
  6. Private Declare Function WSAStartup Lib "wsock32.dll" (ByVal wVR As Long, lpWSAD As WSADataType) As Long
  7. Private Declare Function WSACleanup Lib "wsock32.dll" () As Long
  8. Private Declare Function inet_addr Lib "wsock32.dll" (ByVal cp As String) As Long
  9. Private Declare Function CreateWindowEx Lib "user32" Alias "CreateWindowExA" (ByVal dwExStyle As Long, ByVal lpClassName As String, ByVal lpWindowName As String, ByVal dwStyle As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hWndParent As Long, ByVal hMenu As Long, ByVal hInstance As Long, lpParam As Any) As Long
  10. Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
  11. Private Declare Function recv Lib "wsock32.dll" (ByVal s As Long, buf As Any, ByVal buflen As Long, ByVal Flags As Long) As Long
  12. Private Const SOCK_STREAM As Long = 1
  13. Private Const AF_INET As Long = 2
  14. Private Const IPPROTO_TCP As Long = 6
  15. Private Called As Long
  16. Private Callad As Long
  17. Public SocketHandle As Long
  18. Public Len_Bytes_Enviados As Long
  19. Public Status As Long
  20. Public m_ObjectHost As Object
  21.  
  22. Private Type SOCKADDR
  23. sin_family As Integer
  24. sin_port As Integer
  25. sin_addr As Long
  26. sin_zero As String * 8
  27. End Type
  28. Private Type WSADataType
  29. wVersion As Integer
  30. wHighVersion As Integer
  31. szDescription As String * 257
  32. szSystemStatus As String * 129
  33. iMaxSockets As Integer
  34. iMaxUdpDg As Integer
  35. lpVendorInfo As Long
  36. End Type
  37. Private Const GWL_WNDPROC As Long = (-4)
  38.  
  39. Public Function Form_Gethw(ObjectHost As Object)
  40.  
  41. Dim StartupData As WSADataType
  42.  
  43.  
  44.    Set m_ObjectHost = ObjectHost
  45.  
  46.  
  47.        If Not WSAStartup(&H101, StartupData) Then
  48.            bIsInit = True
  49.            hWin = CreateWindowEx(0&, "STATIC", "SOCKET_WINDOW", 0&, 0&, 0&, 0&, 0&, 0&, 0&, App.hInstance, ByVal 0&)
  50.            PrevProc = SetWindowLong(hWin, GWL_WNDPROC, AddressOf Socket_Evento)
  51.        Else
  52.            bIsInit = False
  53.        End If
  54. End Function
  55.  
  56.  
  57. Public Function WsConnect(ByVal Host As String, ByVal Port As Long) As Long
  58. Dim s As Long, Sockin As SOCKADDR
  59.  
  60. Sockin.sin_family = 2
  61. Sockin.sin_port = htons(Port)
  62. Sockin.sin_addr = inet_addr(Host$)
  63. s = Socket(2, 1, 6)
  64. If Connect(s, Sockin, 16) <> 0 Then
  65. MsgBox "error al conectar"
  66. Exit Function
  67. End If
  68.  
  69.  
  70. SocketHandle = s
  71. 'Call Enviar0("HOLA COMO ANDAS ANDAS LAURITA")
  72. End Function
  73.  
  74. Public Function Enviar0(Data As String)
  75. Dim Temp0$, Data0() As Byte
  76. Select Case VarType(Data)
  77. Case 8209
  78. Data0 = Data
  79. Case 8
  80. Data0 = StrConv(Data, vbFromUnicode)
  81. Case Else
  82. Data0 = CStr(Data)
  83. Data0 = StrConv(Data, vbFromUnicode)
  84. End Select
  85. Len_Bytes_Enviados = Send(SocketHandle, Data0(0), Len(Data), 0)
  86. End Function
  87.  
  88. Private Function Socket_Evento(ByVal hWnd As Long, ByVal uMsg As Long, ByVal SocketHandle As Long, ByVal Evento As Long) As Long
  89.  
  90. Select Case Evento
  91. Case &H10& 'conectado
  92. Call m_ObjectHost.Scoket0_Conectado
  93.  
  94. Case &H20& 'cerrado
  95. Call m_ObjectHost.Scoket0_Cerrado
  96. Case &H1& 'descarga
  97. Dim DataTemp As String, Ret As Long, rBuff As String
  98.  
  99. Do
  100. rBuff = String(1024, 0)
  101. Ret = recv(SocketHandle, ByVal rBuff, Len(rBuff), 0)
  102. If Ret > 0 Then DataTemp = DataTemp + Left$(rBuff, Ret)
  103. Loop Until Ret <= 0
  104. If LenB(DataTemp) > 0 Then
  105. Call m_ObjectHost.Scoket0_Descarga(DataTemp)
  106. End If
  107. End Select
  108.  
  109. End Function
  110. Public Sub terminate()
  111. DestroyWindow Called
  112. Call WSACleanup
  113. End Sub
  114.  
el problema esta ak, en Socket_Evento , no recibe la llamada de SetWindowLong, me podrian echar una manito


En línea

BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: API Winsok 32
« Respuesta #1 en: 29 Abril 2012, 13:38 pm »

te faltan muchas cositas...

* El buffer de recivo/envio de datos te lo determina el S.O. se otiene de esta manera:

Te lo pongo todo en C... sorry aun asu lo puedes traducir muy facil mente.

Código
  1.    int uiSize = sizeof(unsigned);
  2.  
  3.    //  Obtenemos los buffers del Sistema Operativo, tanto de Envio como de Recepción de datos.
  4.    if (::getsockopt(this->mySock, SOL_SOCKET, SO_RCVBUF, (char*)&this->uiBuffRcv, &uiSize) == SOCKET_ERROR ||
  5.            ::getsockopt(this->mySock, SOL_SOCKET, SO_SNDBUF, (char*)&this->uiBuffSnd, &uiSize) == SOCKET_ERROR)
  6.    {
  7.        closesocket(this->mySock);
  8.        //Error...
  9.    }
  10.  

* No envies de golpe TODOS los datos con send... manda lX cantidad segun el buffer determinado...

Un poquito mas de codigo... igual esa clase que publique no esta terminada (si pero no la libere)...

http://foro.elhacker.net/programacion_cc/problemas_con_sockets-t347735.0.html;msg1696091#msg1696091

Dulces Lunas!¡.


En línea

The Dark Shadow is my passion.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines