SharpPcap - входящие пакеты отбрасываются - PullRequest
0 голосов
/ 04 марта 2019

Я пишу приложение на C #, которое связывается с внешним устройством через Ethernet.Для этого я использую SharpPcap версии 4.5.0.

К сожалению, мне пришлось понять, что некоторые входящие пакеты отбрасываются.Для тестирования я также установил переключатель между внешним устройством и моим компьютером, который также регистрирует каждый пакет.В этом журнале пакет виден.Поэтому я совершенно уверен, что пакет действительно отправлен (и это не ошибка внешнего устройства).

Я использую этот код:

public bool TryActivateChannel(uint channelNumber, out string message)
    {
        message = string.Empty;
        devices[(int)channelNumber].Open(DeviceMode.Promiscuous);
        devices[(int)channelNumber].OnPacketArrival += PacketArrived;
        devices[(int)channelNumber].StartCapture();
        return true;
    }

public bool CloseChannel(uint channelNumber, out string message)
        {
            message = string.Empty;
            devices[(int)channelNumber].OnPacketArrival -= PacketArrived;
            devices[(int)channelNumber].Close();
            return true;
        }
private void PacketArrived(object sender, CaptureEventArgs e)
        {
            if (e.Packet.LinkLayerType != PacketDotNet.LinkLayers.Ethernet)
            {
                return;
            }
            else
            {
                inputQueue.Enqueue(e);
            }
}

устройства - это просто CaptureDeviceList.Instance и inputQueue - это ConcurrentQueue, который исключен из очереди в другом потоке.Этот поток записывает каждый входящий пакет в файл * .pcap (где пакеты отсутствуют).Кроме того, я смотрю на свойство Statistics моего ICaptureDevice, которое утверждает, что ни один пакет не отброшен.Я также попытался запустить его на другом компьютере, чтобы убедиться, что это не проблема сетевой карты.

На данный момент я действительно беспомощен.Я сделал что-то не так в своем коде?Это известная проблема?Я читал где-то еще, SharpPcap может управлять до 3 Мбит / с.Я далек от этого значения, поэтому я не верю, что это проблема производительности.

Приложение: Вместо ConcurrentQueue я также попробовал подход со списком, предоставленным автором.,Там у меня тот же результат: некоторые пакеты отсутствуют.У меня также была версия без второго потока, где пакеты обрабатываются непосредственно в обработчике событий.Результат тот же: пакеты отсутствуют.Более того, я захватил одновременно с Wireshark.Здесь пакеты также отсутствуют.Я понял, что все пропущенные пакеты имеют общую длину (более 60 байтов).Для более коротких пакетов я никогда не замечал, что они отсутствуют.Я использую WinPcap 4.1.3.Проблема находится там?

...