2010-07-27 19 views
0

Est-ce que quelqu'un sait quelle est la bonne façon d'obtenir le texte réel dans ces octets? Je fais quelque chose de mal ici.SharpPcap Encoding.UTF8.GetBytes

Et une autre question: utf-8 est-il l'encodage le plus générique, qui montrera la plupart des caractères correctement?

TY

private void device_OnPacketArrival(object sender, SharpPcap.CaptureEventArgs e) 
    { 
     string str = string.Empty; 

     var time = e.Packet.Timeval.Date; 
     var len = e.Packet.Data.Length; 

     str = "time.Hour: " + time.Hour + " time.Minute: " + time.Minute + " time.Second: " + time.Second + " time.Millisecond: " + time.Millisecond + "len: " + len; 
     str += Environment.NewLine + e.Packet.ToString(); 
     str += Environment.NewLine + " Message: " + BitConverter.ToString(e.Packet.Data); 
     //str += e.Packet.Data + Environment.NewLine + Environment.NewLine; 

     Packet p = Packet.ParsePacket(e.Packet); 
     str += e.Packet.Data + Environment.NewLine + Environment.NewLine; 

     byte[] utf8Bytes = Encoding.Convert(Encoding.Unicode, Encoding.UTF8, e.Packet.Data); 

     str += Encoding.UTF8.GetBytes(utf8Bytes.ToString()).ToString(); 
     //txtOutput.Text += "time.Hour: " + time.Hour + "time.Minute: " + time.Minute + "time.Second: " + time.Second + "time.Millisecond:" + time.Millisecond + "len:" + len; 
     //txtOutput.Text += e.Packet.ToString(); 
     //txtOutput.Text += Environment.NewLine; 

     WriteToFile(str,null); 
     // WriteToFile("",c); 

Répondre

0

contiennent des données binaires Packets et pas de données textuelles.

Il peut y avoir des parties de paquets qui contiennent du texte, mais vous devriez seulement essayer et traduire ces parties en texte (pas toutes les données par paquets) et vous devriez savoir quel est le codage de texte.

Il n'y a pas de codage "générique". UTF8 est plus générique que ASCII dans le sens où tout le texte en ASCII sera converti en UTF8 mais généralement il n'y a pas d'encodage "générique" et vous devriez savoir quel est le codage de vos données.

0

Ce que vous cherchez est Encoding.UTF8.GetString() si les données sont en fait UTF-8.

Tout dépend de ce que contient le champ de données. S'il s'agit d'une autre charge utile de protocole, vous devrez l'analyser à l'aide d'un analyseur SharpPcap/Packet.Net ou, si l'analyseur spécifique n'existe pas encore, vous devrez rechercher la spécification de protocole et créer votre propre analyseur à partir de cette.

Tous les paquets entrants ne sont rien mais un grand tableau d'octets de données sans signification jusqu'à ce qu'il puisse être analysé. Parfois, il est facile d'écrire un analyseur, parfois cela peut prendre plusieurs semaines (en fonction de la complexité du protocole ou des outils existants pour analyser les protocoles spécifiques). SharpPcap/Packet.Net est un protocole assez complet pour l'analyse des données de paquets, mais il est loin de couvrir tous les protocoles connus/utilisés qui existent.