Exemplo n.º 1
0
        void ParseImportedFile()
        {
            while (device.Opened)
            {
                RawCapture  packet  = null;
                SessionForm session = null;
                while ((packet = device.GetNextPacket()) != null)
                {
                    if (!started)
                    {
                        continue;
                    }
                    TcpPacket tcpPacket = TcpPacket.GetEncapsulated(Packet.ParsePacket(packet.LinkLayerType, packet.Data));
                    if (tcpPacket == null)
                    {
                        continue;
                    }

                    if ((tcpPacket.SourcePort < Config.Instance.LowPort || tcpPacket.SourcePort > Config.Instance.HighPort) &&
                        (tcpPacket.DestinationPort < Config.Instance.LowPort || tcpPacket.DestinationPort > Config.Instance.HighPort))
                    {
                        continue;
                    }
                    this.Invoke((MethodInvoker) delegate {
                        try
                        {
                            if (tcpPacket.Syn && !tcpPacket.Ack)
                            {
                                session = NewSession();
                                var res = session.BufferTCPPacket(tcpPacket, packet.Timeval.Date);
                                if (res == SessionForm.Results.Continue)
                                {
                                    session.Show(mDockPanel, DockState.Document);
                                }
                            }
                            else if (session != null && session.MatchTCPPacket(tcpPacket))
                            {
                                var res = session.BufferTCPPacket(tcpPacket, packet.Timeval.Date);
                                if (res == SessionForm.Results.CloseMe)
                                {
                                    session.Close();
                                }
                            }
                        }
                        catch (Exception)
                        {
                            session.Close();
                            session = null;
                        }
                    });
                }
                this.Invoke((MethodInvoker) delegate {
                    mSearchForm.RefreshOpcodes(false);
                });
            }
        }
Exemplo n.º 2
0
        private void mTimer_Tick(object sender, EventArgs e)
        {
            try
            {
                RawCapture packet = null;
                mTimer.Enabled = false;

                DateTime now = DateTime.Now;
                foreach (SessionForm ses in MdiChildren)
                {
                    if (ses.CloseMe(now))
                    {
                        closes.Add(ses);
                    }
                }
                closes.ForEach((a) => { a.Close(); });
                closes.Clear();

                while ((packet = mDevice.GetNextPacket()) != null)
                {
                    if (!started)
                    {
                        continue;
                    }

                    TcpPacket   tcpPacket = (TcpPacket)PacketDotNet.Packet.ParsePacket(packet.LinkLayerType, packet.Data).Extract(typeof(TcpPacket));
                    SessionForm session   = null;
                    try
                    {
                        if (tcpPacket.Syn && !tcpPacket.Ack && tcpPacket.DestinationPort >= Config.Instance.LowPort && tcpPacket.DestinationPort <= Config.Instance.HighPort)
                        {
                            session = NewSession();
                            var res = session.BufferTCPPacket(tcpPacket, packet.Timeval.Date);
                            if (res == SessionForm.Results.Continue)
                            {
                                int hash = tcpPacket.SourcePort << 16 | tcpPacket.DestinationPort;
                                waiting[hash] = session;
                            }
                        }
                        else
                        {
                            int hash = tcpPacket.DestinationPort << 16 | tcpPacket.SourcePort;
                            session = Array.Find(MdiChildren, f => (f as SessionForm).MatchTCPPacket(tcpPacket)) as SessionForm;
                            if (session != null)
                            {
                                var res = session.BufferTCPPacket(tcpPacket, packet.Timeval.Date);

                                if (res == SessionForm.Results.CloseMe)
                                {
                                    waiting.Remove(hash);
                                    session.Close();
                                }
                                continue;
                            }

                            if (waiting.TryGetValue(hash, out session))
                            {
                                var res = session.BufferTCPPacket(tcpPacket, packet.Timeval.Date);

                                switch (res)
                                {
                                case SessionForm.Results.Show:
                                    session.Show(mDockPanel, DockState.Document);
                                    break;

                                case SessionForm.Results.Continue:
                                    continue;
                                }
                                waiting.Remove(hash);
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(ex.ToString());
                        session.Close();
                        session = null;
                    }
                }
                mTimer.Enabled = true;
            }
            catch (Exception)
            {
                if (!mDevice.Opened)
                {
                    mDevice.Open(DeviceMode.Promiscuous, 1);
                }
            }
        }
Exemplo n.º 3
0
        void ParseImportedFile()
        {
            RawCapture  packet  = null;
            SessionForm session = null;

            this.Invoke((MethodInvoker) delegate
            {
                while ((packet = device.GetNextPacket()) != null)
                {
                    if (!started)
                    {
                        continue;
                    }

                    TcpPacket tcpPacket = (TcpPacket)PacketDotNet.Packet.ParsePacket(packet.LinkLayerType, packet.Data).Extract(typeof(TcpPacket));
                    if (tcpPacket == null)
                    {
                        continue;
                    }

                    if ((tcpPacket.SourcePort < Config.Instance.LowPort || tcpPacket.SourcePort > Config.Instance.HighPort) &&
                        (tcpPacket.DestinationPort < Config.Instance.LowPort || tcpPacket.DestinationPort > Config.Instance.HighPort))
                    {
                        continue;
                    }
                    try
                    {
                        if (tcpPacket.Syn && !tcpPacket.Ack)
                        {
                            if (session != null)
                            {
                                session.Show(mDockPanel, DockState.Document);
                            }

                            session = NewSession();
                            var res = session.BufferTCPPacket(tcpPacket, packet.Timeval.Date);
                            if (res == SessionForm.Results.Continue)
                            {
                                //    mDockPanel.Contents.Add(session);
                                //session.Show(mDockPanel, DockState.Document);
                            }
                        }
                        else if (session != null && session.MatchTCPPacket(tcpPacket))
                        {
                            var res = session.BufferTCPPacket(tcpPacket, packet.Timeval.Date);
                            if (res == SessionForm.Results.CloseMe)
                            {
                                session.Close();
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine("Exception while parsing logfile: {0}", ex);
                        session.Close();
                        session = null;
                    }
                }


                if (session != null)
                {
                    session.Show(mDockPanel, DockState.Document);
                }

                if (session != null)
                {
                    mSearchForm.RefreshOpcodes(false);
                }
            });
        }
Exemplo n.º 4
0
        private void ProcessPacketQueue()
        {
            while (!Terminate)
            {
                bool bSleep = true;

                lock (QueueLock)
                {
                    if (PacketQueue.Count != 0)
                    {
                        bSleep = false;
                    }
                }

                if (bSleep)
                {
                    Thread.Sleep(250);
                }
                else
                {
                    List <RawCapture> CurQueue;
                    lock (QueueLock)
                    {
                        CurQueue    = PacketQueue;
                        PacketQueue = new List <RawCapture>();
                    }

                    foreach (var pPacket in CurQueue)
                    {
                        this.Invoke((MethodInvoker) delegate
                        {
                            var packet          = PacketDotNet.Packet.ParsePacket(pPacket.LinkLayerType, pPacket.Data);
                            TcpPacket tcpPacket = (TcpPacket)packet.Extract(typeof(TcpPacket));
                            SessionForm session = null;
                            if (tcpPacket != null)
                            {
                                try
                                {
                                    if ((tcpPacket.SourcePort < Config.Instance.LowPort || tcpPacket.SourcePort > Config.Instance.HighPort) &&
                                        (tcpPacket.DestinationPort < Config.Instance.LowPort || tcpPacket.DestinationPort > Config.Instance.HighPort))
                                    {
                                        return;
                                    }

                                    if (tcpPacket.Syn && !tcpPacket.Ack && tcpPacket.DestinationPort >= Config.Instance.LowPort && tcpPacket.DestinationPort <= Config.Instance.HighPort)
                                    {
                                        session = NewSession();
                                        var res = session.BufferTCPPacket(tcpPacket, pPacket.Timeval.Date);
                                        if (res == SessionForm.Results.Continue)
                                        {
                                            int hash      = tcpPacket.SourcePort << 16 | tcpPacket.DestinationPort;
                                            waiting[hash] = session;
                                        }
                                    }
                                    else
                                    {
                                        int hash = tcpPacket.DestinationPort << 16 | tcpPacket.SourcePort;
                                        session  = Array.Find(MdiChildren, f => (f as SessionForm).MatchTCPPacket(tcpPacket)) as SessionForm;
                                        if (session != null)
                                        {
                                            var res = session.BufferTCPPacket(tcpPacket, pPacket.Timeval.Date);

                                            if (res == SessionForm.Results.CloseMe)
                                            {
                                                waiting.Remove(hash);
                                                session.Close();
                                            }
                                            return;
                                        }

                                        if (waiting.TryGetValue(hash, out session))
                                        {
                                            var res = session.BufferTCPPacket(tcpPacket, pPacket.Timeval.Date);

                                            switch (res)
                                            {
                                            case SessionForm.Results.Show:
                                                session.Show(mDockPanel, DockState.Document);
                                                break;

                                            case SessionForm.Results.Continue:
                                                return;
                                            }
                                            waiting.Remove(hash);
                                        }
                                    }
                                }
                                catch (Exception ex)
                                {
                                    Console.WriteLine(ex.Message);
                                }
                            }
                        });
                    }
                }
            }
        }
Exemplo n.º 5
0
        private void mTimer_Tick(object sender, EventArgs e)
        {
            try
            {
                RawCapture packet = null;
                mTimer.Enabled = false;

                DateTime now = DateTime.Now;
                foreach (SessionForm ses in MdiChildren)
                {
                    if (ses.CloseMe(now))
                    {
                        closes.Add(ses);
                    }
                }
                closes.ForEach((a) => { a.Close(); });
                closes.Clear();

                while ((packet = mDevice.GetNextPacket()) != null)
                {
                    if (!started)
                    {
                        continue;
                    }
                    TcpPacket   tcpPacket = TcpPacket.GetEncapsulated(Packet.ParsePacket(packet.LinkLayerType, packet.Data));
                    SessionForm session   = null;
                    try
                    {
                        if (tcpPacket.Syn && !tcpPacket.Ack && tcpPacket.DestinationPort >= Config.Instance.LowPort && tcpPacket.DestinationPort <= Config.Instance.HighPort && tcpPacket.DestinationPort != 9301)
                        {
                            session = NewSession();
                            var res = session.BufferTCPPacket(tcpPacket, packet.Timeval.Date);
                            if (res == SessionForm.Results.Continue)
                            {
                                session.Show(mDockPanel, DockState.Document);
                            }
                        }
                        else
                        {
                            session = Array.Find(MdiChildren, f => (f as SessionForm).MatchTCPPacket(tcpPacket)) as SessionForm;
                            if (session != null)
                            {
                                var res = session.BufferTCPPacket(tcpPacket, packet.Timeval.Date);

                                if (res == SessionForm.Results.CloseMe)
                                {
                                    session.Close();
                                }
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(ex.ToString());
                        session.Close();
                        session = null;
                    }
                }
                mTimer.Enabled = true;
            }
            catch (Exception)
            {
                if (!mDevice.Opened)
                {
                    mDevice.Open(DeviceMode.Promiscuous, 1);
                }
            }
        }