2010-07-27 51 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是用于解析数据包数据的相当广泛的协议,但它远远不能覆盖所有已知/使用的协议。