/// <summary>
        /// 接收到数据包
        /// </summary>
        /// <param name="ar">异步操作状态接口参数</param>
        private void CallReceive(IAsyncResult ar)
        {
            try
            {
                if (socket != null)
                {
                    int            rec_count = socket.EndReceive(ar);
                    Model.IPPacket packet    = new Model.IPPacket();
                    switch (rec_buffer[9])
                    {
                    case 1: packet.Protocol = "ICMP";
                        break;

                    case 2: packet.Protocol = "IGMP";
                        break;

                    case 6: packet.Protocol = "TCP";
                        break;

                    case 17: packet.Protocol = "UDP";
                        break;

                    default: packet.Protocol = "UNKNOWN";
                        break;
                    }
                    if (string.IsNullOrEmpty(this.Protocol) || this.Protocol == packet.Protocol)
                    {
                        int totalLength = BitConverter.ToInt32(new byte[4] {
                            rec_buffer[3], rec_buffer[2], 0, 0
                        }, 0);

                        byte[] sourceAddress = new byte[4];
                        Array.Copy(rec_buffer, 12, sourceAddress, 0, 4);
                        packet.SourceIP = new IPAddress(sourceAddress).ToString();
                        byte[] targetAddress = new byte[4];
                        Array.Copy(rec_buffer, 16, targetAddress, 0, 4);
                        packet.TargetIP   = new IPAddress(targetAddress).ToString();
                        packet.SourcePort = BitConverter.ToInt32(new byte[4] {
                            rec_buffer[21], rec_buffer[20], 0, 0
                        }, 0);
                        packet.TargetPort = BitConverter.ToInt32(new byte[4] {
                            rec_buffer[23], rec_buffer[22], 0, 0
                        }, 0);
                        if ((this.SourcePort == 0 || this.SourcePort == packet.SourcePort) &&
                            (this.TargetPort == 0 || this.TargetPort == packet.TargetPort))
                        {
                            packet.ReceiveBuffer = new byte[totalLength];
                            Array.Copy(rec_buffer, 20, packet.ReceiveBuffer, 0, totalLength);
                            if (RecPacket != null)
                            {
                                RecPacket(packet);
                            }
                        }
                    }
                    Recevice();
                }
            }
            catch (Exception)
            { }
        }
Exemple #2
0
 void sniffer_RecPacket(Model.IPPacket packet)
 {
     dgPacket.Invoke(new MethodInvoker(delegate
     {
         lstRecPacket.Insert(0, packet);
     }));
 }
Exemple #3
0
 private void dgPacket_SelectionChanged(object sender, EventArgs e)
 {
     if (dgPacket.SelectedRows.Count > 0)
     {
         Model.IPPacket packet = lstRecPacket[dgPacket.SelectedRows[0].Index];
         string         strCMD = "";
         foreach (byte b in packet.ReceiveBuffer)
         {
             strCMD += string.Format("{0:X2} ", b);
         }
         txtData.Text = strCMD;
     }
 }
Exemple #4
0
 private void dgPacket_SelectionChanged(object sender, EventArgs e)
 {
     if (dgPacket.SelectedRows.Count > 0)
     {
         Model.IPPacket packet = lstRecPacket[dgPacket.SelectedRows[0].Index];
         string         strCMD = "";
         foreach (byte b in packet.ReceiveBuffer)
         {
             strCMD += string.Format("{0:X2} ", b);
         }
         //strCMD = packet.RecTime +"]: "+ strCMD;
         txtData.Text = strCMD;
         //strCMD += packet.Protocol + "\n";
         //strCMD += packet.RecTime + "\n";
         //strCMD += Encoding.ASCII.GetString(packet.ReceiveBuffer) + "\n";
         //Console.WriteLine(strCMD);
     }
 }