Exemple #1
0
        /// <summary>
        /// Пасинг записей из пакета
        /// </summary>
        /// <param name="Data">ссылка не массив байт пакета</param>
        /// <param name="start">позиция откуда выбирать следущию запись</param>
        /// <returns>Объект записи</returns>
        private RowNetFlow ParsingRow(ref byte[] Data, int start)
        {
            RowNetFlow ret = new RowNetFlow();

            ret.srcaddr    = RawToUInt(ref Data, start);     // new byte[] { Data[start], Data[start + 1], Data[start + 2], Data[start + 3] }; //Data.Skip(start).Take(4).ToArray();
            ret.dstaddr    = RawToUInt(ref Data, start + 4); //new byte[] { Data[start + 4], Data[start + 5], Data[start + 6], Data[start + 7] }; //Data.Skip(start + 4).Take(4).ToArray();
            ret.nexthop    = RawToUInt(ref Data, start + 8); //new byte[] { Data[start + 8], Data[start + 9], Data[start + 10], Data[start + 11] }; ;
            ret.inputSNMP  = (ushort)((Data[start + 13] & 0xFF) | (Data[start + 12] & 0xFF) << 8);;
            ret.outputSNMP = (ushort)((Data[start + 15] & 0xFF) | (Data[start + 14] & 0xFF) << 8);;;
            ret.dPkts      = RawToUInt(ref Data, start + 16);
            ret.dOctets    = RawToUInt(ref Data, start + 20);
            ret.first      = RawToUInt(ref Data, start + 24);
            ret.last       = RawToUInt(ref Data, start + 28);
            ret.srcport    = (ushort)((Data[start + 33] & 0xFF) | (Data[start + 32] & 0xFF) << 8);
            ret.dstport    = (ushort)((Data[start + 35] & 0xFF) | (Data[start + 34] & 0xFF) << 8);
            ret.pad1       = Data[start + 36];
            ret.tcp_flags  = Data[start + 37];
            ret.protIP     = Data[start + 38];
            ret.tosIP      = Data[start + 39];
            ret.src_as     = (ushort)((Data[start + 41] & 0xFF) | (Data[start + 40] & 0xFF) << 8);
            ret.dst_as     = (ushort)((Data[start + 43] & 0xFF) | (Data[start + 42] & 0xFF) << 8);
            ret.src_mask   = Data[start + 44];
            ret.dst_mask   = Data[start + 45];
            ret.pad2       = (ushort)((Data[start + 47] & 0xFF) | (Data[start + 46] & 0xFF) << 8);
            return(ret);
        }
Exemple #2
0
        private void StartThread()
        {
            UdpClient  receivingUdpClient = new UdpClient(PortServer);
            IPEndPoint RemoteIpEndPoint   = null;

            try
            {
                while (!IsStop)
                {
                    try
                    {
                        byte[] receiveBytes = receivingUdpClient.Receive(ref RemoteIpEndPoint);
                        byte[] ip           = RemoteIpEndPoint.Address.GetAddressBytes();
                        if (receiveBytes[1] != 0x05)
                        {
                            continue;
                        }
                        HeaderNetFlow header = this.ParsingHeder(ref receiveBytes);
                        header.FromHost = (uint)(ip[3] & 0xFF | (ip[2] & 0xFF) << 8 | (ip[1] & 0xFF) << 16 | (ip[0] & 0xFF) << 24);//RawToUInt(ref ip, 0);
                        RowNetFlow[] rows = new RowNetFlow[header.Count];

                        for (int i = 0; i < header.Count; i++)
                        {
                            rows[i] = this.ParsingRow(ref receiveBytes, 24 + i * 48);
                        }

                        if (uiContext != null)
                        {
                            uiContext.Post(OnNewPackage, new NewPackageEvent(receiveBytes)
                            {
                                Header = header, Rows = rows
                            });
                        }
                        else
                        {
                            OnNewPackage(new NewPackageEvent(receiveBytes)
                            {
                                Header = header, Rows = rows
                            });
                        }
                    }
                    catch (ThreadAbortException exAbort)
                    {
                        Logs.Write(exAbort);
                    }
                    catch (Exception e)
                    {
                        Logs.Write(e);
                    }
                }
                receivingUdpClient.Close();
            }
            catch (Exception ex)
            {
                Logs.Write(ex);
                receivingUdpClient.Close();
            }
        }