Salut,
EDIT: J'ai modifié le titre et le sujet, car le problème c'est que je reçois et envois quelques paquets en double (le problème viens de réception des paquets, vu que je n'utilise pas le Parser a l'envoie).
Quand j'utilise le Parser sur mon bot MITM je reçois quelques paquets en doubles, j'ai utilisé plusieurs Parsers mais, le problème est toujours ici.
Screens de quelques paquets quand je me connecte au serveur d'authentification.
[B]
Des fois comme ça :
[/B]
Loading Image
[B]
[B]J'ai ça en logs sur le premier screen :[/B]
Paquet Envoyé
---------------------
Paquet Reçu : 1
---------------------
Paquet Reçu : 3
---------------------
Paquet Reçu : 183
---------------------
Paquet Envoyé
---------------------
Paquet Reçu : 10
---------------------
Paquet Reçu : 6314
Paquet Reçu : 10
Paquet Reçu : 22
Paquet Reçu : 30
Des fois comme ça :
[/B]
Loading Image
J'ai ça en logs sur le deuxième screen :
Paquet Envoyé
---------------------
Paquet Reçu : 1
---------------------
Paquet Reçu : 3
Paquet Reçu : 183
---------------------
Paquet Envoyé
---------------------
Paquet Reçu : 10
---------------------
Paquet Reçu : 6314
Paquet Reçu : 10
Paquet Reçu : 22
Paquet Reçu : 30
---------------------
Paquet Envoyé
Voici quelques classes:
private void OnClientLoginServerConnected(Client client)
{
Server server = new Server(loginServerEndpoint);
this.client = client;
this.server = server;
server.Connect();
client.onReception += ToServer;
server.onReception += ToClient;
}
private void ToClient(byte[] buffer)
{
ParseData(buffer);
}
private void ToServer(byte[] buffer)
{
Log("Paquet Envoyé");
server.send(buffer);
}
private void ParseData(byte[] buffer_To_Parse)
{
int header;
int packet_Id;
int lenght_count;
int lenght;
byte[] packet_Content = new byte[0];
using (BigEndianReader reader = new BigEndianReader(buffer_To_Parse))
{
while (reader.BytesAvailable >= 2)
{
header = reader.ReadShort();
packet_Id = header >> 2;
lenght_count = header & 3;
if (reader.BytesAvailable >= lenght_count)
{
if ((lenght_count < 0) || (lenght_count > 3))
{
throw new Exception("Malformated Message Header, invalid bytes number to read message length (inferior to 0 or superior to 3)");
}
else
{
lenght = 0;
for (int i = lenght_count - 1; i >= 0; i--)
{
lenght |= reader.ReadByte() << (i * 8);
}
if (lenght == 0)
{
packet_Content = new byte[0];
}
if (reader.BytesAvailable >= lenght)
{
packet_Content = reader.ReadBytes(lenght);
}
else if (reader.BytesAvailable < lenght)
{
packet_Content = reader.ReadBytes((int)reader.BytesAvailable);
}
string content_hex = string.Empty;
int huit_bytes = 0;
foreach (byte b in packet_Content)
{
if (huit_bytes == 8)
{
content_hex += "\r\n";
huit_bytes = 0;
}
content_hex += b.ToString("X2") + " ";
huit_bytes++;
}
Log("Paquet Reçu : " + packet_Id.ToString());
// Console.WriteLine(content_hex);
TreatPacket(packet_Id, packet_Content, buffer_To_Parse);
}
}
}
}
}
private void TreatPacket(int packet_Id, byte[] packet_Content, byte[] buffer_To_Parse)
{
if (packet_Id != 42)
{
client.Send(buffer_To_Parse);
}
}
Thread de réception des données de Client et Server:
private void Receive()
{
Thread.Sleep(500);
while (socket.Connected)
{
if (socket.Available > 0)
{
byte[] buffer = new byte[socket.Available];
socket.Receive(buffer);
if (onReception != null) onReception(buffer);
Logs("---------------------");
}
Thread.Sleep(1);
}
}
Et finalement voila un screen de ce que je reçois et envoie sans MITM :
Loading Image
Merci d'avance