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