예제 #1
0
        public void RecordPagingResponse(AMessageDetail i)
        {

            //寻呼响应
            if (i.sccp_slr != null && i.sccp_dlr == null)
            {
                //查询稀疏矩阵
                if (dListConnetion.ContainsKey(i.m3ua_opc + i.m3ua_dpc + i.sccp_slr))
                    //后续消息,Flow正常增加包标签
                    dListFlow.Add(i.PacketNum, dListConnetion[i.m3ua_opc + i.m3ua_dpc + i.sccp_slr]);
                else
                    //位置更新消息需要进入队列,开始记录包标签
                    dListCallback.Add(i.PacketNum, i.m3ua_opc + i.m3ua_dpc + i.sccp_slr);

                Dictionary<int?, string> d = new Dictionary<int?, string>();
                foreach (var call in dListCallback)
                    d.Add(call.Key, call.Value);
                Dictionary<int?, string> _d = new Dictionary<int?, string>();
                foreach (var call in dListCallbackClone)
                    _d.Add(call.Key, call.Value);

                //回调寻呼消息包标签 ,相当于把TMSI和IMSI替换成opc+dpc+slr
                if (i.tmsi != null)
                    foreach (var call in d)
                        if (call.Value == i.tmsi)
                            dListCallback[call.Key] = i.m3ua_opc + i.m3ua_dpc + i.sccp_slr;
                if (i.imsi != null)
                    foreach (var call in _d)
                        if (call.Value == i.imsi)
                            dListCallback[call.Key] = i.m3ua_opc + i.m3ua_dpc + i.sccp_slr;
            }
        }
예제 #2
0
        static void DecoderPacketPcap(string cmd)
        {
            FollowStream flowstream = new FollowStream();
            string dat = CommonFunction.ExecuteCmd(cmd);
            string[] txtLines = dat.Substring(dat.IndexOf("\r\n")).Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
            foreach (string line in txtLines)
            {
                string nLine=line.Replace("[Malformed Packet]", "");
                nLine = nLine.Trim();
                var items = nLine.Split(new char[] { ' ' });
                AMessageDetail msg = new AMessageDetail();
                msg.PacketNum = Int32.Parse(items[0]);
                msg.PacketTime = DateTime.Parse(items[1]);
                msg.imsi = items[2];
                msg.tmsi = items[3];
                msg.m3ua_opc = items[4];
                msg.m3ua_dpc = items[5];
                msg.sccp_slr = items[6];
                msg.sccp_dlr = items[7];
                for (int i = 8; i < items.Count(); i++)
                    msg.message_type += items[i];

                flowstream.FollowSccpStream(msg);
            }
        }
예제 #3
0
        public void RecordContinueMessage(AMessageDetail i)
        {
            //后续消息
            if (i.sccp_slr == null && i.sccp_dlr != null)
            {
                //查询稀疏矩阵
                if (dListConnetion.ContainsKey(i.m3ua_opc + i.m3ua_dpc + i.sccp_dlr))
                {
                    //后续消息,Flow正常增加包标签,此处增加包标签
                    dListFlow.Add(i.PacketNum, dListConnetion[i.m3ua_opc + i.m3ua_dpc + i.sccp_dlr]);
                }
                else
                {
                    //开始记录包标签
                    dListCallback.Add(i.PacketNum, i.m3ua_opc + i.m3ua_dpc + i.sccp_dlr);
                }

                Dictionary <int?, string> d = new Dictionary <int?, string>();
                foreach (var call in dListCallback)
                {
                    d.Add(call.Key, call.Value);
                }
                Dictionary <int?, string> _d = new Dictionary <int?, string>();
                foreach (var call in dListCallbackClone)
                {
                    _d.Add(call.Key, call.Value);
                }

                //回调寻呼消息包标签
                if (i.tmsi != null)
                {
                    foreach (var call in d)
                    {
                        if (call.Value == i.tmsi)
                        {
                            //开始记录包标签
                            dListCallback[call.Key] = i.m3ua_opc + i.m3ua_dpc + i.sccp_dlr;
                        }
                    }
                }
                if (i.imsi != null)
                {
                    foreach (var call in _d)
                    {
                        if (call.Value == i.imsi)
                        {
                            //开始记录包标签
                            dListCallback[call.Key] = i.m3ua_opc + i.m3ua_dpc + i.sccp_dlr;
                        }
                    }
                }
            }
        }
예제 #4
0
 public void ReleaseCallback(AMessageDetail i)
 {
     //删除回调记录的主键
     foreach (var k in hRemoveCall)
     {
         dListCallback.Remove(k);
         if (dListCallbackClone.ContainsKey(k))
         {
             dListCallbackClone.Remove(k);
         }
     }
 }
예제 #5
0
        public void RecordPagingResponse(AMessageDetail i)
        {
            //寻呼响应
            if (i.sccp_slr != null && i.sccp_dlr == null)
            {
                //查询稀疏矩阵
                if (dListConnetion.ContainsKey(i.m3ua_opc + i.m3ua_dpc + i.sccp_slr))
                {
                    //后续消息,Flow正常增加包标签
                    dListFlow.Add(i.PacketNum, dListConnetion[i.m3ua_opc + i.m3ua_dpc + i.sccp_slr]);
                }
                else
                {
                    //位置更新消息需要进入队列,开始记录包标签
                    dListCallback.Add(i.PacketNum, i.m3ua_opc + i.m3ua_dpc + i.sccp_slr);
                }

                Dictionary <int?, string> d = new Dictionary <int?, string>();
                foreach (var call in dListCallback)
                {
                    d.Add(call.Key, call.Value);
                }
                Dictionary <int?, string> _d = new Dictionary <int?, string>();
                foreach (var call in dListCallbackClone)
                {
                    _d.Add(call.Key, call.Value);
                }

                //回调寻呼消息包标签 ,相当于把TMSI和IMSI替换成opc+dpc+slr
                if (i.tmsi != null)
                {
                    foreach (var call in d)
                    {
                        if (call.Value == i.tmsi)
                        {
                            dListCallback[call.Key] = i.m3ua_opc + i.m3ua_dpc + i.sccp_slr;
                        }
                    }
                }
                if (i.imsi != null)
                {
                    foreach (var call in _d)
                    {
                        if (call.Value == i.imsi)
                        {
                            dListCallback[call.Key] = i.m3ua_opc + i.m3ua_dpc + i.sccp_slr;
                        }
                    }
                }
            }
        }
예제 #6
0
 public void RecordSccpRelease(AMessageDetail i)
 {
     //删除稀疏矩阵的主键
     if (i.message_type == "RLC" || i.message_type == "RLSD" || i.message_type.IndexOf("Release") != -1)
     {
         dListConnetion.Remove(i.m3ua_dpc + i.m3ua_opc + i.sccp_dlr);
         dListConnetion.Remove(i.m3ua_dpc + i.m3ua_opc + i.sccp_slr);
         dListConnetion.Remove(i.m3ua_opc + i.m3ua_dpc + i.sccp_dlr);
         dListConnetion.Remove(i.m3ua_opc + i.m3ua_dpc + i.sccp_slr);
         //此处做统计,通过多线程
         CountFlow(i.PacketNum);
         Console.WriteLine(i.PacketNum);;
     }
 }
예제 #7
0
 //通过回调的方式获取 opc+dpc+slr+dlr字典值的关键字的集合
 // public void FollowSccpStream(IEnumerable<AMessageDetail> totalMessge)
 // public void FollowSccpStream(Dictionary<int?, AMessageDetail> totalMessge)
 public void FollowSccpStream(AMessageDetail i)
 {
     hListMessage.Add(i);
     RecordPaging(i);
     RecordPagingResponse(i);
     RecordConnetionConfirm(i);
     RecordContinueMessage(i);
     RecordSccpRelease(i);
     ReleaseCallback(i);
     //foreach (AMessageDetail i in totalMessge)
     //var total = totalMessge.OrderBy(e => e.Key);
     //foreach (var dic in total)
     //{
     //var i = dic.Value;
     //common.messagelist.Add(i);
     //Console.WriteLine(i.PacketNum);
 }
 void GetFromPcapFile(string nLine)
 {
     var items = nLine.Split(new char[] { ' ' });
     AMessageDetail msg = new AMessageDetail();
     msg.PacketNum = Int32.Parse(items[0]);
     msg.PacketTime = DateTime.Parse(items[1]);
     msg.imsi = items[2];
     msg.tmsi = items[3];
     msg.m3ua_opc = items[4];
     msg.m3ua_dpc = items[5];
     msg.sccp_slr = items[6];
     msg.sccp_dlr = items[7];
     for (int i = 8; i < items.Count(); i++)
         msg.message_type += items[i];
     Console.WriteLine(msg.PacketNum);
     flowstream.FollowSccpStream(msg);
 }
예제 #9
0
 //通过回调的方式获取 opc+dpc+slr+dlr字典值的关键字的集合
 // public void FollowSccpStream(IEnumerable<AMessageDetail> totalMessge)
 // public void FollowSccpStream(Dictionary<int?, AMessageDetail> totalMessge)
 public void FollowSccpStream(AMessageDetail i)
 {
     hListMessage.Add(i);
     RecordPaging(i);
     RecordPagingResponse(i);
     RecordConnetionConfirm(i);
     RecordContinueMessage(i);
     RecordSccpRelease(i);
     ReleaseCallback(i);
     //foreach (AMessageDetail i in totalMessge)
     //var total = totalMessge.OrderBy(e => e.Key);
     //foreach (var dic in total)
     //{
     //var i = dic.Value;
     //common.messagelist.Add(i);
     //Console.WriteLine(i.PacketNum);
 }
예제 #10
0
 private void RecordPaging(AMessageDetail i)
 {
     //寻呼消息
     if (i.sccp_slr == null && i.sccp_dlr == null)
     {
         //寻呼消息,包标签都需要进入队列
         if (i.tmsi != null)
         {
             dListCallback.Add(i.PacketNum, i.tmsi);
             dListFlow.Add(i.PacketNum, i.tmsi);
         }
         if (i.imsi != null)
         {
             dListCallbackClone.Add(i.PacketNum, i.imsi);
             if (!dListFlow.ContainsKey(i.PacketNum))
                 dListFlow.Add(i.PacketNum, i.imsi);
         }
     }
 }
예제 #11
0
        void GetFromPcapFile(string nLine)
        {
            var            items = nLine.Split(new char[] { ' ' });
            AMessageDetail msg   = new AMessageDetail();

            msg.PacketNum  = Int32.Parse(items[0]);
            msg.PacketTime = DateTime.Parse(items[1]);
            msg.imsi       = items[2];
            msg.tmsi       = items[3];
            msg.m3ua_opc   = items[4];
            msg.m3ua_dpc   = items[5];
            msg.sccp_slr   = items[6];
            msg.sccp_dlr   = items[7];
            for (int i = 8; i < items.Count(); i++)
            {
                msg.message_type += items[i];
            }
            Console.WriteLine(msg.PacketNum);
            flowstream.FollowSccpStream(msg);
        }
예제 #12
0
 private void RecordPaging(AMessageDetail i)
 {
     //寻呼消息
     if (i.sccp_slr == null && i.sccp_dlr == null)
     {
         //寻呼消息,包标签都需要进入队列
         if (i.tmsi != null)
         {
             dListCallback.Add(i.PacketNum, i.tmsi);
             dListFlow.Add(i.PacketNum, i.tmsi);
         }
         if (i.imsi != null)
         {
             dListCallbackClone.Add(i.PacketNum, i.imsi);
             if (!dListFlow.ContainsKey(i.PacketNum))
             {
                 dListFlow.Add(i.PacketNum, i.imsi);
             }
         }
     }
 }
예제 #13
0
        public void RecordContinueMessage(AMessageDetail i)
        {
            //后续消息
            if (i.sccp_slr == null && i.sccp_dlr != null)
            {
                //查询稀疏矩阵
                if (dListConnetion.ContainsKey(i.m3ua_opc + i.m3ua_dpc + i.sccp_dlr))
                    //后续消息,Flow正常增加包标签,此处增加包标签
                    dListFlow.Add(i.PacketNum, dListConnetion[i.m3ua_opc + i.m3ua_dpc + i.sccp_dlr]);
                else
                    //开始记录包标签
                    dListCallback.Add(i.PacketNum, i.m3ua_opc + i.m3ua_dpc + i.sccp_dlr);

                Dictionary<int?, string> d = new Dictionary<int?, string>();
                foreach (var call in dListCallback)
                    d.Add(call.Key, call.Value);
                Dictionary<int?, string> _d = new Dictionary<int?, string>();
                foreach (var call in dListCallbackClone)
                    _d.Add(call.Key, call.Value);

                //回调寻呼消息包标签
                if (i.tmsi != null)
                    foreach (var call in d)
                        if (call.Value == i.tmsi)
                            //开始记录包标签
                            dListCallback[call.Key] = i.m3ua_opc + i.m3ua_dpc + i.sccp_dlr;
                if (i.imsi != null)
                    foreach (var call in _d)
                        if (call.Value == i.imsi)
                            //开始记录包标签
                            dListCallback[call.Key] = i.m3ua_opc + i.m3ua_dpc + i.sccp_dlr;
            }
        }
예제 #14
0
 public void RecordSccpRelease(AMessageDetail i)
 {
     //删除稀疏矩阵的主键
     if (i.message_type == "RLC" || i.message_type == "RLSD" || i.message_type.IndexOf("Release")!=-1)
     {
         dListConnetion.Remove(i.m3ua_dpc + i.m3ua_opc + i.sccp_dlr);
         dListConnetion.Remove(i.m3ua_dpc + i.m3ua_opc + i.sccp_slr);
         dListConnetion.Remove(i.m3ua_opc + i.m3ua_dpc + i.sccp_dlr);
         dListConnetion.Remove(i.m3ua_opc + i.m3ua_dpc + i.sccp_slr);
         //此处做统计,通过多线程
         CountFlow(i.PacketNum);
         Console.WriteLine(i.PacketNum);;
     }
 }
예제 #15
0
        public void ReleaseCallback(AMessageDetail i)
        {

            //删除回调记录的主键
            foreach (var k in hRemoveCall)
            {
                dListCallback.Remove(k);
                if (dListCallbackClone.ContainsKey(k))
                    dListCallbackClone.Remove(k);
            }

        }
예제 #16
0
 public void RecordConnetionConfirm(AMessageDetail i)
 {
     //CC消息
     if (i.sccp_slr != null && i.sccp_dlr != null)
     {
         //Flow正常增加包标签
         dListFlow.Add(i.PacketNum, i.m3ua_opc + i.m3ua_dpc + i.sccp_slr + i.sccp_dlr);
         //正常增加稀疏矩阵
         if (!dListConnetion.ContainsKey(i.m3ua_opc + i.m3ua_dpc + i.sccp_slr))
         {
             dListConnetion.Add(i.m3ua_opc + i.m3ua_dpc + i.sccp_slr, i.m3ua_opc + i.m3ua_dpc + i.sccp_slr + i.sccp_dlr);
             //回调位置更新包标签,已经替换了TMSI和IMSI的寻呼消息包标签
             foreach (var call in dListCallback)
             {
                 if (call.Value == i.m3ua_opc + i.m3ua_dpc + i.sccp_slr)
                 {
                     if (!dListFlow.ContainsKey(call.Key))
                     {
                         dListFlow.Add(call.Key, dListConnetion[call.Value]);
                     }
                     else
                     {
                         dListFlow[call.Key] = dListConnetion[call.Value];
                     }
                     hRemoveCall.Add(call.Key);
                 }
             }
         }
         if (!dListConnetion.ContainsKey(i.m3ua_opc + i.m3ua_dpc + i.sccp_dlr))
         {
             dListConnetion.Add(i.m3ua_opc + i.m3ua_dpc + i.sccp_dlr, i.m3ua_opc + i.m3ua_dpc + i.sccp_slr + i.sccp_dlr);
             //回调位置更新包标签
             foreach (var call in dListCallback)
             {
                 if (call.Value == i.m3ua_opc + i.m3ua_dpc + i.sccp_dlr)
                 {
                     if (!dListFlow.ContainsKey(call.Key))
                     {
                         dListFlow.Add(call.Key, dListConnetion[call.Value]);
                     }
                     else
                     {
                         dListFlow[call.Key] = dListConnetion[call.Value];
                     }
                     hRemoveCall.Add(call.Key);
                 }
             }
         }
         if (!dListConnetion.ContainsKey(i.m3ua_dpc + i.m3ua_opc + i.sccp_slr))
         {
             dListConnetion.Add(i.m3ua_dpc + i.m3ua_opc + i.sccp_slr, i.m3ua_opc + i.m3ua_dpc + i.sccp_slr + i.sccp_dlr);
             //回调位置更新包标签
             foreach (var call in dListCallback)
             {
                 if (call.Value == i.m3ua_dpc + i.m3ua_opc + i.sccp_slr)
                 {
                     if (!dListFlow.ContainsKey(call.Key))
                     {
                         dListFlow.Add(call.Key, dListConnetion[call.Value]);
                     }
                     else
                     {
                         dListFlow[call.Key] = dListConnetion[call.Value];
                     }
                     hRemoveCall.Add(call.Key);
                 }
             }
         }
         if (!dListConnetion.ContainsKey(i.m3ua_dpc + i.m3ua_opc + i.sccp_dlr))
         {
             dListConnetion.Add(i.m3ua_dpc + i.m3ua_opc + i.sccp_dlr, i.m3ua_opc + i.m3ua_dpc + i.sccp_slr + i.sccp_dlr);
             //回调位置更新包标签
             foreach (var call in dListCallback)
             {
                 if (call.Value == i.m3ua_dpc + i.m3ua_opc + i.sccp_dlr)
                 {
                     if (!dListFlow.ContainsKey(call.Key))
                     {
                         dListFlow.Add(call.Key, dListConnetion[call.Value]);
                     }
                     else
                     {
                         dListFlow[call.Key] = dListConnetion[call.Value];
                     }
                     hRemoveCall.Add(call.Key);
                 }
             }
         }
     }
 }
예제 #17
0
 public void RecordConnetionConfirm(AMessageDetail i)
 {
     //CC消息
     if (i.sccp_slr != null && i.sccp_dlr != null)
     {
         //Flow正常增加包标签
         dListFlow.Add(i.PacketNum, i.m3ua_opc + i.m3ua_dpc + i.sccp_slr + i.sccp_dlr);
         //正常增加稀疏矩阵
         if (!dListConnetion.ContainsKey(i.m3ua_opc + i.m3ua_dpc + i.sccp_slr))
         {
             dListConnetion.Add(i.m3ua_opc + i.m3ua_dpc + i.sccp_slr, i.m3ua_opc + i.m3ua_dpc + i.sccp_slr + i.sccp_dlr);
             //回调位置更新包标签,已经替换了TMSI和IMSI的寻呼消息包标签
             foreach (var call in dListCallback)
                 if (call.Value == i.m3ua_opc + i.m3ua_dpc + i.sccp_slr)
                 {
                     if (!dListFlow.ContainsKey(call.Key))
                         dListFlow.Add(call.Key, dListConnetion[call.Value]);
                     else
                         dListFlow[call.Key] = dListConnetion[call.Value];
                     hRemoveCall.Add(call.Key);
                 }
         }
         if (!dListConnetion.ContainsKey(i.m3ua_opc + i.m3ua_dpc + i.sccp_dlr))
         {
             dListConnetion.Add(i.m3ua_opc + i.m3ua_dpc + i.sccp_dlr, i.m3ua_opc + i.m3ua_dpc + i.sccp_slr + i.sccp_dlr);
             //回调位置更新包标签
             foreach (var call in dListCallback)
                 if (call.Value == i.m3ua_opc + i.m3ua_dpc + i.sccp_dlr)
                 {
                     if (!dListFlow.ContainsKey(call.Key))
                         dListFlow.Add(call.Key, dListConnetion[call.Value]);
                     else
                         dListFlow[call.Key] = dListConnetion[call.Value];
                     hRemoveCall.Add(call.Key);
                 }
         }
         if (!dListConnetion.ContainsKey(i.m3ua_dpc + i.m3ua_opc + i.sccp_slr))
         {
             dListConnetion.Add(i.m3ua_dpc + i.m3ua_opc + i.sccp_slr, i.m3ua_opc + i.m3ua_dpc + i.sccp_slr + i.sccp_dlr);
             //回调位置更新包标签
             foreach (var call in dListCallback)
                 if (call.Value == i.m3ua_dpc + i.m3ua_opc + i.sccp_slr)
                 {
                     if (!dListFlow.ContainsKey(call.Key))
                         dListFlow.Add(call.Key, dListConnetion[call.Value]);
                     else
                         dListFlow[call.Key] = dListConnetion[call.Value];
                     hRemoveCall.Add(call.Key);
                 }
         }
         if (!dListConnetion.ContainsKey(i.m3ua_dpc + i.m3ua_opc + i.sccp_dlr))
         {
             dListConnetion.Add(i.m3ua_dpc + i.m3ua_opc + i.sccp_dlr, i.m3ua_opc + i.m3ua_dpc + i.sccp_slr + i.sccp_dlr);
             //回调位置更新包标签
             foreach (var call in dListCallback)
                 if (call.Value == i.m3ua_dpc + i.m3ua_opc + i.sccp_dlr)
                 {
                     if (!dListFlow.ContainsKey(call.Key))
                         dListFlow.Add(call.Key, dListConnetion[call.Value]);
                     else
                         dListFlow[call.Key] = dListConnetion[call.Value];
                     hRemoveCall.Add(call.Key);
                 }
         }
     }
 }