// 只在讀檔中用到 private void SipProcess() { foreach (string file in mOpenFileDialog.FileNames) { SIPTrace.PacketFileRTP(new StringBuilder(file), new StringBuilder(FileStoragePath.GetPath_SIP())); } }
// This function works on a thread. private void GetPacketFromQueue() { while (trdGetPacketFromQueueAct) { RawCapture rawCapture; Packet packet = null; if (PacketQueue.Count == 0) // the Queue doesn't have packets. { if (PcapFileEOF == true) { trdGetPacketFromQueueAct = false; break; } else { continue; } } lock (PacketQueueLock) { rawCapture = PacketQueue.Dequeue(); } try { packet = Packet.ParsePacket(rawCapture.LinkLayerType, rawCapture.Data); } catch { continue; } LastPacketArrivalTime = rawCapture.Timeval.Date.ToLocalTime().ToString(); //Hydar // Packet tmpTcpPacket = null; // tmpTcpPacket = (packet as TcpPacket); //else if (packet is EthernetPacket) //{ // //协议数据区(TCP/IP协议包数据区,包括IP协议数据及TCP协议数据) // byte[] tmpBuf = new byte[packet.Bytes.Length - 8]; // //复制实际TCP/IP数据块 // Array.Copy(packet.Bytes, 8, tmpBuf, 0, tmpBuf.Length); // MemoryStream tmpMs = new MemoryStream(); // //将原来的以太包头作为目标TCP/IP数据包的以太头 // tmpMs.Write(packet.Header, 0, packet.Header.Length); // //将实际TCP/IP数据包写入目标TCP/IP数据包中,跟在以太包头后面,成为一个新的TCP/IP数据包 // tmpMs.Write(tmpBuf, 0, tmpBuf.Length); // try // { // //尝试创建新的TCP/IP数据包对象, // //第一个参数为以太头长度,第二个为数据包数据块 // tmpTcpPacket = Packet.ParsePacket(rawCapture.LinkLayerType, tmpMs.ToArray()); // } // catch { tmpTcpPacket = null; } // tmpMs.Dispose(); //} // SIP、RTP Packet Analyze and handle them if (Status == EnumStatus.Monitor) { SIPTrace.Handler(packet); } // POP3、SMTP、IMAP Packet Analyze MailTrace.Trace(packet); HttpMail.Trace(packet, this); // Log SSL Keys SSLTrace.Trace(packet, this); // Push pakcet to List<IPTrace> UpdateListIPTrace(rawCapture); if (this.Status == EnumStatus.OpenFile) { mReadFileProgressBar.Increment(rawCapture.Data.Length); } } }