2010-07-27 1 views
0

Кто-нибудь знает, что это правильный способ получить фактический текст в этих байтах? Я делаю что-то неправильно здесь.SharpPcap Encoding.UTF8.GetBytes

И еще один вопрос: является ли utf-8 самой общей кодировкой, которая будет отображать большинство символов правильно?

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); 

ответ

0

Пакеты содержат двоичные данные, а не текстовые данные.

Могут быть части пакетов, содержащие текст, но вы должны только попробовать и перевести эти части в текст (а не все пакетные данные), и вы должны знать, что такое кодировка текста.

Нет «общего» кодирования. UTF8 является более общим, чем ASCII, в том смысле, что весь текст в ASCII будет преобразован с использованием UTF8, но, как правило, нет «общего» кодирования, и вы должны знать, что такое кодировка ваших данных.

0

Что вы ищете, это Encoding.UTF8.GetString(), если данные на самом деле являются UTF-8.

Все зависит от того, что содержит поле данных. Если это другая полезная нагрузка на протокол, вам нужно проанализировать его либо с помощью анализатора SharpPcap/Packet.Net, либо, если конкретный парсер еще не существует, вам нужно будет найти спецификацию протокола и создать собственный синтаксический анализатор из что.

Все входящие пакеты представляют собой не что иное, как большой байтовый массив бессмысленных данных, пока он не будет проанализирован. Иногда легко написать парсер, иногда это может занять много недель (в зависимости от сложности протокола или того, какие инструменты уже существуют для синтаксического анализа конкретных протоколов). SharpPcap/Packet.Net - довольно обширный протокол для анализа пакетных данных, но он далеко не охватывает все известные и используемые протоколы.