private static int PackSort(PacketWrapper x, PacketWrapper y) { if (x.tcpPacket.SequenceNumber > y.tcpPacket.SequenceNumber) { return(1); } else { return(-1); } }
/// <summary> /// Prints the time and length of each received packet /// </summary> private void device_OnPacketArrival(object sender, CaptureEventArgs e) { // 抓取 http 包并在控制台显示,https 有加密不行 PacketWrapper packetWrapper = new PacketWrapper(packetId++, e.Packet); uint ackn = packetWrapper.tcpPacket.AcknowledgmentNumber; if (!packDic.ContainsKey(ackn)) { packDic.Add(ackn, new List <PacketWrapper>()); packTimeRest.Add(ackn, new int[] { packTimeMax }); } packDic[ackn].Add(packetWrapper); List <uint> nd = new List <uint>(); foreach (var p in packTimeRest) { packTimeRest[p.Key][0]--; if (packTimeRest[p.Key][0] <= 0) { nd.Add(p.Key); } } foreach (var p in nd) { packTimeRest.Remove(p); packDic.Remove(p); } if (!packetWrapper.tcpPacket.Push) { return; } byte[] data = CombinePacket(packDic, ackn); if (data == null) { return; } string s = Encoding.GetEncoding("GB18030").GetString(data); int index = s.IndexOf("\r\n\r\n"); if (index < 0) { return; } index += 4; string header = s.Substring(0, index); if (!HttpCheck(header)) { return; } Console.WriteLine(header); Console.WriteLine("datalen" + data.Length); //string body = s.Substring(index); //Console.WriteLine(body); byte[] bodyBytes = null; for (int i = 0; i < data.Length - 1; i++) { if (data[i] == 13 && data[i + 2] == 13 && data[i + 1] == 10 && data[i + 3] == 10) { i += 4; bodyBytes = new byte[data.Length - i]; for (int t = 0; t < bodyBytes.Length; t++, i++) { bodyBytes[t] = data[i]; } break; } } if (bodyBytes == null) { return; } byte[] bodyUncompressedBytes = Decompress(bodyBytes); if (bodyUncompressedBytes == null) { return; } string json = Encoding.GetEncoding("GB18030").GetString(bodyUncompressedBytes); Console.WriteLine(json); }