0x00020503D382010000026672000967616574616E323232010081EA9E92F4712882C316FCF6063653268CC40EBC90A3C3904ED5F59121168022F379B096BB6E77E4E0266B37C92B71641DACB89B37AAD6CFE861E3A8996CE6B9F3C39C7874C70CB8D6D8177A155FA3D55EF2F2365B478ACB1D4E2C5C1ABACB12E00FE0B5986E3F5CDF928C7E99AD06FE90C9FF8989E3D5311905FAEB5D51BCDB42075353D6B65666D9B3D849AD4BF5DE49DF33252D4E738FE747A61B5B6EB1E7583FEC5AC69E68628638F4806819C6B457128FC3721560F420195D804232529E86A85B3B5AE46772155DA0E8442FC419A2EB54420424A388BB1AB370B041F8A3727A284CD7957C1FB378A0BE7C2BEF223ADAF5D85F599A611AA4BA8A9EF9FBB10000
parsing() Send -> Une requête d’envoi ou de réception de données n’a pas été autorisée car le socket n’est pas connecté et (lors de l’envoi sur un socket datagramme en utilisant un appel sendto) aucune adresse n’a été fournie
Une requête d’envoi ou de réception de données n’a pas été autorisée car le socket n’est pas connecté et (lors de l’envoi sur un socket datagramme en utilisant un appel sendto) aucune adresse n’a été fournie
Public Sub Threat(ByVal PacketID As Integer, ByVal PacketData As DofusReader)
Dim ID_Message As Object = Nothing
Select Case PacketID
Case 1
'MsgBox("gg")
Case 3
ID_Message = New HelloConnectMessage
ID_Message.Deserialize(PacketData)
Dim key = ID_Message.key
Dim salt = ID_Message.salt
Dim Account As String = "****"
Dim Password As String = "*****"
Dim CryptedPassword As List(Of Integer)
Dim RSA As New RSAManager
RSA.setPublicKey(key)
RSA.setSalt(salt)
CryptedPassword = RSA.cipherRsa(Password)
Dim version_ As New Version
version_.initVersion(2, 5, 3, 54146, 1, 0)
Dim Message As New IdentificationMessage
Message.initIdentificationMessage(version_, "fr", Account, CryptedPassword, 0, True, True, False)
Message.pack()
Case 20
MessageBox.Show("Authentification ratée !")
Case 22
Case 42
ip = ID_Message.address
socketConnexion.Dispose()
End Select
End Sub
Dim ip As String
Public socketConnexion As New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp) ' on prepare la socket
Public socketJeu As New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp) ' on prepare la socket
Dim Ecoute_Connexion_thread As New Thread(New ThreadStart(AddressOf Ecoute_Connexion)) ' on prepare le thread pour recevoire
Dim Ecoute_Jeu_thread As New Thread(New ThreadStart(AddressOf Ecoute_Jeu))
Public buffer(8192) As Byte ' on prepare le buffer
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
socketConnexion.Connect("213.248.126.180", 5555) ' on se connecte
Ecoute_Connexion_thread.Start() ' on demarre le thread pour recevoire
' ici peu etre mettre une pause de 1 sec si _socket est encore connecté (faut voire)
While Ecoute_Connexion_thread.IsAlive
Application.DoEvents()
End While
socketJeu.Connect(ip, 5555) ' on se connecte au serveur de jeu
Ecoute_Jeu_thread.Start() ' on demarre le thread pour recevoire avec le serveur de jeu
End Sub
Sub Ecoute_Connexion()
While socketConnexion.Connected ' boucle infinie tant que connecté
Dim i = socketConnexion.Receive(buffer) ' on met dans i le nombre d'octets recu
Dim data(i - 1) As Byte ' on créé un tableau de bytes du nombre de bytes recus
Array.Copy(buffer, data, i) ' on copie buffer dans data
parsing(data) ' on lance le parsing
End While
End Sub
Sub Ecoute_Jeu()
While socketJeu.Connected ' boucle infinie tant que connecté
Dim i = socketJeu.Receive(buffer) ' on met dans i le nombre d'octets recu
Dim data(i - 1) As Byte ' on créé un tableau de bytes du nombre de bytes recus
Array.Copy(buffer, data, i) ' on copie buffer dans data
parsing(data) ' on lance le parsing
End While
End Sub
Dim Data_Out(0) As Byte ' au cas ou le buffer est trop petit pour la reception (debut du paquet recu trop long)
Dim Waiting As Integer ' au cas ou le buffer est trop petit pour la reception
Public Sub parsing(ByVal data() As Byte)
Try
Dim index As Integer ' pour savoir ou on est
Dim id_and_length As UShort ' les 2 premiers octets (16 bits)
Dim packet_id As UShort ' les 14 premiers bits des 16
Dim packet_length_of As Byte ' les 2 derniers bits des 16
Dim packet_length As Integer ' la longueur du packet
Dim Packet_Start As Integer
Dim Packet_End As Integer
If Waiting > 1 Then ' le buffer etait trop petit ?
Dim data_temps(data.Length + Data_Out.Length - 1) As Byte ' on créé un tableau de byte temporaire
Array.Copy(Data_Out, 0, data_temps, 0, Data_Out.Length) ' on met le debut du paquet trop long dans le tableau temporaire
Array.Copy(data, 0, data_temps, Data_Out.Length, data.Length) ' on met la reception a la suite
data = data_temps ' on met le tableau temporaire dans le tableau de travail
End If
Do Until index = data.Length ' on traite jusque la fin
Packet_Start = index
id_and_length = data(index) * 256 + data(index + 1) ' les 2 premiers octets
packet_length_of = id_and_length And 3 ' on veut les 2 derniers bits donc on masque (and) avec 11 en binaire (3 en decimal)
packet_id = id_and_length >> 2 ' on veut les 14 premiers bits donc on decale les 16 bits de 2 bits vers la droite
index += 2 + packet_length_of ' on avance des 2 octets de id_and_length + du nombre d'octets de la taille de taille
Select Case packet_length_of ' on lit le bon nombre d'octet pour connaitre la taille des données
Case 0
packet_length = 0
Case 1
packet_length = data(index - 1)
Case 2
packet_length = 256 * data(index - 2) + data(index - 1)
Case 3
packet_length = 65536 * data(index - 3) + 256 * data(index - 2) + data(index - 1)
End Select
If index + packet_length > data.Length Then ' buffer trop petit ?
Waiting = packet_length + index - Packet_Start ' alors on le signale
ReDim Data_Out(data.Length - Packet_Start - 1) ' on redimensionne le tableau de debut du paquet trop long
Array.Copy(data, Packet_Start, Data_Out, 0, data.Length - Packet_Start) ' on copie le debut du paquet trop long
Exit Sub ' on sort
End If
Console.WriteLine("recu : id = " & packet_id & " taille = " & packet_length) ' on ecrit l'ID et la taille
Dim packet(0) As Byte ' on prepare le paquet
If packet_length > 0 Then ' si sa taille est plus grande que 0 on redimensionne
ReDim packet(packet_length - 1)
Array.Copy(data, index, packet, 0, packet_length) ' et on copie les donnée
End If
'DataCheck(packet_id, packet) ' on verra plus tard
Threat(packet_id, New DofusReader(New IO.MemoryStream(packet)))
index += packet_length ' on met l'index a jour
Packet_End = index
If Packet_End = data.Length Then ' si ca tombe pile poil alors le buffer etait assez grand
Waiting = 0 ' on reset
ReDim Data_Out(0) ' on reset
End If
Loop
Catch e As Exception
Console.WriteLine("parsing() " & e.TargetSite.Name & " -> " & e.Message)
End Try
End Sub
Friend Shared Sub Send(ByVal PacketID As Integer)
Dim MessageLenghtType As Integer = ComputeTypeLen(m_Bytes.Count)
Dim Header As Short = ComputeStaticHeader(PacketID, MessageLenghtType)
Dim BytesToWrite(2 + MessageLenghtType + m_Bytes.Count - 1) As Byte
BytesToWrite(0) = Header >> 8
BytesToWrite(1) = Header - 256 * BytesToWrite(0)
Dim index As Integer
Select Case MessageLenghtType
Case 1
BytesToWrite(2) = m_Bytes.Count
index = 3
Case 2
BytesToWrite(2) = m_Bytes.Count >> 8
BytesToWrite(3) = m_Bytes.Count - 256 * BytesToWrite(2)
index = 4
Case 3
BytesToWrite(2) = m_Bytes.Count >> 16
BytesToWrite(3) = m_Bytes.Count >> 8
BytesToWrite(4) = m_Bytes.Count - 256 * BytesToWrite(3) - 256 * 256 * BytesToWrite(2)
index = 5
End Select
Console.WriteLine("envoie : id = " & PacketID & ", taille = " & m_Bytes.Count) ' on ecrit l'ID et la taille
Console.Write("0x")
For i As Integer = index To m_Bytes.Count + index - 1
BytesToWrite(i) = m_Bytes(i - index)
Console.Write(BytesToWrite(i).ToString("X2"))
Next
Console.WriteLine()
If Form1.socketConnexion.Connected Then
Form1.socketConnexion.Send(BytesToWrite)
MsgBox("Il ne va pas ici")
Else
Form1.socketJeu.Send(BytesToWrite)
End If
m_Bytes.Clear()
End Sub