Работа с 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");
        }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 3.615 из 5
Похожие ответы