SharpPcap Encoding.UTF8.GetBytes - PullRequest
       13

SharpPcap Encoding.UTF8.GetBytes

0 голосов
/ 27 июля 2010

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

И еще один вопрос: является ли 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);

Ответы [ 2 ]

0 голосов
/ 10 ноября 2010

Что вам нужно, так это Encoding.UTF8.GetString (), если данные на самом деле имеют формат UTF-8.

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

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

0 голосов
/ 30 июля 2010

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

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

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

...