示例#1
0
 private static int PackSort(PacketWrapper x, PacketWrapper y)
 {
     if (x.tcpPacket.SequenceNumber > y.tcpPacket.SequenceNumber)
     {
         return(1);
     }
     else
     {
         return(-1);
     }
 }
示例#2
0
        /// <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);
        }