1

Тема: PcapDotNet, показує невірну довжину пакета

Хай. Написав програмку, котра моніторить усі пакети на певному інтерфейсі, і от задав їй фільтр по протоколоу ICMP (ну це типу ping). І пінгую сайтик.
В cmd пише, що відправлено 32 байти, а в програмці пише, що 74.
Чому так?
Скріншот

Прихований текст

http://не-дійсний-домен/dHCqn/3655dbd552.png

Код

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using PcapDotNet.Core;
using PcapDotNet.Packets;

namespace CourseNetwork
{

    public partial class Form1 : Form
    {
        private PacketDevice device;
        private PacketCommunicator communicator;
        public Form1()
        {
            InitializeComponent();
            backgroundWorker1.WorkerSupportsCancellation = true;
        }

        private void btnGLD_Click(object sender, EventArgs e)
        {
            bindingSource1.DataSource = LivePacketDevice.AllLocalMachine;
            cbDevices.DataSource = bindingSource1.DataSource;
            cbDevices.DisplayMember = "Description";
        }

        private void btnCapture_Click(object sender, EventArgs e)
        {
            if (backgroundWorker1.IsBusy)
            {
                backgroundWorker1.CancelAsync();
                btnCapture.Text = "Start capture";
            }
            else
            {
                device = (PacketDevice)cbDevices.SelectedItem;
                if (device != null)
                {
                    backgroundWorker1.RunWorkerAsync(device);
                    btnCapture.Text = "Stop capture";
                }
                else
                {
                    MessageBox.Show("At first u have to select a device");
                }
            }
        }

        private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            device = (PacketDevice) e.Argument;

            communicator = device.Open(65536, PacketDeviceOpenAttributes.Promiscuous, -1);
            Packet packet;
            while (true)
            {
                if (backgroundWorker1.CancellationPending) {e.Cancel = true; return;}
                
                PacketCommunicatorReceiveResult result = communicator.ReceivePacket(out packet);
                if (result == PacketCommunicatorReceiveResult.Ok)
                    dgvData.Invoke(new Action(() => { dgvData.Rows.Insert(0,packet.Ethernet.IpV4.Source, packet.Ethernet.IpV4.Destination, packet.Ethernet.IpV4.Protocol,
                        packet.Length,packet.Timestamp); }));
            }
        }

        private void Form1_Resize(object sender, EventArgs e)
        {
            dgvData.Size = new Size(Width - 31, Height-103); 
        }

        private void btnFilter_Click(object sender, EventArgs e)
        {
            if(communicator!=null)
            communicator.SetFilter(textBox1.Text);
        }
           
    }
}
Подякували: leofun011

2

Re: PcapDotNet, показує невірну довжину пакета

FakiNyan написав:

В cmd пише, що відправлено 32 байти, а в програмці пише, що 74.

А ви уважніше прочитайте, що в cmd пише.

3

Re: PcapDotNet, показує невірну довжину пакета

koala написав:
FakiNyan написав:

В cmd пише, що відправлено 32 байти, а в програмці пише, що 74.

А ви уважніше прочитайте, що в cmd пише.

почитав, і шо?

4

Re: PcapDotNet, показує невірну довжину пакета

А те, що ніхто не казав, що загальна довжина пакета - 32 байти.

5

Re: PcapDotNet, показує невірну довжину пакета

ну то я і сам знаю, шукав був інфу про це, але всюди якесь різне лайно, ніде не написано, яку має довжину заголовок того icmp

6

Re: PcapDotNet, показує невірну довжину пакета

Заголовок ICMP? 8 байт.
А хто сказав, що там один тільки заголовок ICMP?

7

Re: PcapDotNet, показує невірну довжину пакета

koala написав:

Заголовок ICMP? 8 байт.
А хто сказав, що там один тільки заголовок ICMP?

ну ще ip, 32 байти, ага? 32+8=40+32=72, а ще 2 байти то є шо?

8

Re: PcapDotNet, показує невірну довжину пакета

Пане, це ваш пакет, ви і подивіться.

9

Re: PcapDotNet, показує невірну довжину пакета

так я ж його не створюю, то ping відправляє оті 32 байти

10

Re: PcapDotNet, показує невірну довжину пакета

я тут подумав, що, можливо, оті 2 байти являються номером порта

11

Re: PcapDotNet, показує невірну довжину пакета

еее, пацани, то я просто не те виводив, зараз вивожу те. Відправляю ping с масою в 1 байт, і мені показує, що довжина якогось хедера == 20 байтів, а довжина всього пакету == 29 байтів.
Я почав передавати 2 байти, і довжина пакету стала 30 байтів, тобто тут йде 20 байтів під якийсь хедер, далі 8 байтів заголовок самого icmp, і 2 байти даних