/// <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) { } }
void sniffer_RecPacket(Model.IPPacket packet) { dgPacket.Invoke(new MethodInvoker(delegate { lstRecPacket.Insert(0, packet); })); }
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; } }
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); } }