2016-08-05 46 views
1

Ich versuche, eine Anwendung in C#, die die Aktivität des IAX2-Ports 4569 liest. Ich habe bereits die UDP-und TCP-Listener erstellt, aber wenn ich versuche, das UDP zu konvertieren Datenteil zu einer Zeichenfolge habe ich einige seltsame Codes gefunden. Ich weiß nicht, ob ich es richtig mache. Einige Hilfe dabei brauche ich. Diese Klasse ist der UDPHeader, von dem ich die Daten bekomme.Wie UDP-Header von Port IAX2 in lesbare Zeichenfolge konvertieren

public class UDPHeader 
{ 
    //UDP header fields 
    private ushort usSourcePort;   //Sixteen bits for the source port number   
    private ushort usDestinationPort;  //Sixteen bits for the destination port number 
    private ushort usLength;    //Length of the UDP header 
    private short sChecksum;    //Sixteen bits for the checksum 
              //(checksum can be negative so taken as short)    
    //End UDP header fields 

    private byte[] byUDPData = new byte[4096]; //Data carried by the UDP packet 

    public UDPHeader(byte [] byBuffer, int nReceived) 
    { 
     MemoryStream memoryStream = new MemoryStream(byBuffer, 0, nReceived); 
     BinaryReader binaryReader = new BinaryReader(memoryStream); 

     //The first sixteen bits contain the source port 
     usSourcePort = (ushort)IPAddress.NetworkToHostOrder(binaryReader.ReadInt16()); 

     //The next sixteen bits contain the destination port 
     usDestinationPort = (ushort)IPAddress.NetworkToHostOrder(binaryReader.ReadInt16()); 

     //The next sixteen bits contain the length of the UDP packet 
     usLength = (ushort)IPAddress.NetworkToHostOrder(binaryReader.ReadInt16()); 

     //The next sixteen bits contain the checksum 
     sChecksum = IPAddress.NetworkToHostOrder(binaryReader.ReadInt16());    

     //Copy the data carried by the UDP packet into the data buffer 
     Array.Copy(byBuffer, 
        8,    //The UDP header is of 8 bytes so we start copying after it 
        byUDPData, 
        0, 
        nReceived - 8); 
    }} 

Als nächstes habe ich eine Klasse, um die Daten aus dem UDPHeader in normalen Text zu konvertieren. Dies ist der Konstruktor:

public IAXHeader(byte[] byBuffer, int nReceived) 
{ 
MemoryStream memoryStream = new MemoryStream(byBuffer, 0, nReceived); 
StringReader stringReader = new StringReader(Encoding.UTF8.GetString(memoryStream.ToArray())); 

/** iterate lines of stringReader **/ 
string aLine = stringReader.ReadLine(); 
} 

Die Console.WriteLine von Aline ist dies: Console log for aLine of stringReader

Ich muss wissen, was ich falsch mache die Bytes von IAX2 UDP Daten zu entschlüsseln.

Antwort

1

Da dieses Protokoll kein textlesbares Protokoll ist, analysieren Sie es einfach als UTF8-Zeichenfolge, um unerwartete Ergebnisse zu erhalten.

Sie sollten die Protokollbeschreibung lesen (zum Beispiel [https://tools.ietf.org/html/rfc5456]) und die Daten basierend auf dieser Beschreibung analysieren.

Zum Starten können Sie die Daten möglicherweise Byte für Byte als hexadezimale Codes ausgeben.

+0

Danke, ich habe das Protokoll gelesen und meinen Code geändert. Die IAX2-Header-Daten sind verschlüsselt und binär. Ich arbeite noch an der Verschlüsselung, aber ich habe einige der Daten, die ich brauchte. Danke noch einmal. – Lichblitz