2010-07-27 5 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의 모든 텍스트가 UTF8을 사용하여 변환되지만 일반적으로 "일반"인코딩이 없으므로 데이터의 인코딩이 무엇인지 알아야한다는 점에서 ASCII보다 일반적입니다.

0

실제로 데이터가 UTF-8 인 경우 Encoding.UTF8.GetString()을 사용합니다.

모두 데이터 필드에 무엇이 들어 있는지에 따라 다릅니다. 다른 프로토콜 페이로드 인 경우 SharpPcap/Packet.Net 파서를 사용하여 파싱해야합니다. 특정 파서가 아직 존재하지 않으면 프로토콜 스펙을 검색하여 파서를 직접 작성해야합니다. 그.

모든 들어오는 패킷은 구문 분석 할 수있을 때까지 의미가없는 데이터의 큰 바이트 배열입니다. 때로는 파서를 작성하는 것이 쉽지만 때로는 프로토콜의 복잡성이나 특정 프로토콜을 구문 분석하기위한 도구에 따라 수 주일이 걸릴 수도 있습니다. SharpPcap/Packet.Net은 패킷 데이터를 파싱하기위한 꽤 광범위한 프로토콜이지만, 일반적으로 알려진/사용 된 모든 프로토콜을 다루는 것이 아닙니다.