有人知道获取这些字节中的实际文本的正确方法是什么吗?我在这里做错了什么。
另一个问题是: 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);发布于 2010-07-30 14:00:43
数据包包含二进制数据,而不是文本数据。
包的某些部分可能包含文本,但您应该只尝试将这些部分转换为文本(而不是整个包数据),并且您应该知道什么是文本编码。
没有“通用”编码。UTF8比ASCII码更通用,因为ASCII码中的所有文本都将使用UTF8进行转换,但通常没有“通用”编码,您应该知道数据的编码是什么。
发布于 2010-11-10 15:37:57
如果数据实际上是UTF-8,那么您要查找的是Encoding.UTF8.GetString()。
这完全取决于数据字段包含的内容。如果它是另一个协议有效负载,您将需要使用SharpPcap/Packet.Net解析器来解析它,或者,如果特定的解析器还不存在,那么您将需要查找协议规范并从中构建您自己的解析器。
有时编写解析器很容易,有时可能需要几个星期(取决于协议的复杂性或已经存在的解析特定协议的工具)。SharpPcap/Packet.Net是一个用于解析数据包数据的非常广泛的协议,但它远远不能涵盖现有的所有常用/使用的协议。
https://stackoverflow.com/questions/3347013
复制相似问题