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; } }
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); } }
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; } } } } }
public void ReleaseCallback(AMessageDetail i) { //删除回调记录的主键 foreach (var k in hRemoveCall) { dListCallback.Remove(k); if (dListCallbackClone.ContainsKey(k)) { dListCallbackClone.Remove(k); } } }
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; } } } } }
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);; } }
//通过回调的方式获取 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); }
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); } } }
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); }
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); } } } }
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; } }
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);; } }
public void ReleaseCallback(AMessageDetail i) { //删除回调记录的主键 foreach (var k in hRemoveCall) { dListCallback.Remove(k); if (dListCallbackClone.ContainsKey(k)) dListCallbackClone.Remove(k); } }
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); } } } } }
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); } } } }