Работа с List<> - C#
Формулировка задачи:
Добрый день ! Пытаюсь доделать свой сниффер . Когда передает (грубо говоря ) пакет меньше 1440 байт . Отображается все норм . Когда превышает начинается Пропуск данных . Я хочу данные запихнуть в List<byte>. и если у меня пакет больше 1440 то складывать его , а потом выводить его уже в Аске или Юникоде .
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Diagnostics; using System.Linq; using System.Text; using System.Windows.Forms; using PacketDotNet; using SharpPcap; using System.IO; using System.IO.Compression; using System.Runtime.InteropServices; /* private System.Windows.Forms.RichTextBox tb_log; private System.Windows.Forms.Button b_start; private System.Windows.Forms.Button b_stop; private System.Windows.Forms.Label l_status; private System.Windows.Forms.ComboBox cb_dlist; private System.Windows.Forms.Button b_clear; private System.Windows.Forms.TextBox tb_ip; private System.Windows.Forms.Label l_ip; */ namespace snif { public partial class Form1 : Form { CaptureDeviceList deviceList = CaptureDeviceList.Instance; ICaptureDevice captureDevice; string data; //List<byte> data_hex = new List<byte>(); byte[] data_hex; int len; public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { tb_ip.Text = "0.0.0.0"; if (deviceList.Count == 0) this.cb_dlist.Text = "device not found"; else { for (int i = 0; i != deviceList.Count; ++i) { cb_dlist.Items.Add((i + 1).ToString() + " " + deviceList[i].Description); } } string ver = SharpPcap.Version.VersionString; tb_log.AppendText("SharpPcap : " + ver + "\n"); } private void start(object sender, EventArgs e) { if (cb_dlist.Text != "") { captureDevice = deviceList[cb_dlist.SelectedIndex]; int readTimeoutMilliseconds = 1000; captureDevice.Open(DeviceMode.Promiscuous, readTimeoutMilliseconds); captureDevice.Filter = "src net " + tb_ip.Text; captureDevice.OnPacketArrival += new PacketArrivalEventHandler(Program_OnPacketArrival); captureDevice.StartCapture(); l_status.Text = "Status : connected"; } } private void stop(object sender, EventArgs e) { if (captureDevice.Started) { captureDevice.StopCapture(); captureDevice.Close(); l_status.Text = "Status : disconnected"; } } private void clear(object sender, EventArgs e) { tb_log.Text = ""; } private void Program_OnPacketArrival(object sender, CaptureEventArgs e) { Packet packet = Packet.ParsePacket(e.Packet.LinkLayerType, e.Packet.Data); var tcpPacket = TcpPacket.GetEncapsulated(packet); var ipPacket = IpPacket.GetEncapsulated(packet); if (tcpPacket != null && ipPacket != null) { DateTime time = e.Packet.Timeval.Date; len = e.Packet.Data.Length; var srcIp = ipPacket.SourceAddress.ToString(); var dstIp = ipPacket.DestinationAddress.ToString(); var srcPort = tcpPacket.SourcePort.ToString(); var dstPort = tcpPacket.DestinationPort.ToString(); data_hex = tcpPacket.PayloadData; this.Invoke(new Action(datapaket)); } } public void datapaket() { tb_log.AppendText(Encoding.UTF8.GetString(data_hex) + "\n"); } private void tb_log_TextChanged(object sender, EventArgs e) { tb_log.Text = tb_log.Text.Replace("><", ">" + "\n" + "<"); } } }
Решение задачи: «Работа с List<>»
textual
Листинг программы
public void outpacket() { for (int i = 0; i < datapacket.Count; i++) { if (datapacket[i] == 0x00) { datapacket.RemoveAt(i); } } byte[] array = datapacket.ToArray(); datapacket.Clear(); tb_log.AppendText(array.Length + "\n" + "\n" + Encoding.UTF8.GetString(array) + "\n" + "\n"); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д