Exemplo n.º 1
0
 // 只在讀檔中用到
 private void SipProcess()
 {
     foreach (string file in mOpenFileDialog.FileNames)
     {
         SIPTrace.PacketFileRTP(new StringBuilder(file), new StringBuilder(FileStoragePath.GetPath_SIP()));
     }
 }
Exemplo n.º 2
0
        // 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);
                }
            }
        }