Второй LivePCapDevice в SharpPCap не работает? - PullRequest
0 голосов
/ 18 декабря 2010

Я использую lib SharpPCap для захвата пакетов, а затем анализирую их, чтобы найти видео адрес flv в функции PacketArrivalEventHandler.Основная часть класса выглядит следующим образом:

class addrdetector
{
    private LivePCapDevice device;
    private device_OnPacketArrival(object sender, CaptureEventArgs e)
    {
        /* some analysis and some output */
        if (match)
        {
            device.StopCapture();
            device.Close();
        }
    }
    public Analyse()
    {
         var devices = LivePcapDeviceList.Instance;
         device = devices[2];
         device.OnPacketArrival +=
            new PacketArrivalEventHandler(device_OnPacketArrival);  
         device.Open();
         device.StartCapture();
    }
}

если у меня есть 2 экземпляра addrdector в программе, первый экземпляр имеет правильный вывод, а второй не имеет никакого вывода.Похоже, что второй не может перехватить какой-либо пакет.
Я протестировал 2 экземпляра LivePCapDevice в одной и той же основной функции, и они работают правильно.Они также могут работать в 2 EXE.s.Но я не могу понять, почему они конфликтуют в программе ... Спасибо ~

Ответы [ 2 ]

1 голос
/ 19 февраля 2011

Клонируйте источник SharpPcap и посмотрите на примеры

Я не могу сослаться на точный пример в данный момент, потому что я далеко от своего компьютера разработки, но я абсолютно уверен, что есть пример того, как добавить дополнительные экземпляры LivePcapDevice.

Это не невозможно, но решение не интуитивно понятно. Я думаю, что пример, который использует это, называется что-то вроде "CaptureMultipleFilters".

Удачи, и я обновлю этот ответ с лучшими данными, как только смогу.

0 голосов
/ 04 июля 2018

Nameproject: MultipleFiltersOnDevice.

И код следующий:

var device1 = CaptureDeviceList.Instance[i];
var device2 = CaptureDeviceList.New()[i]; // NOTE: the call to New()

У меня работает.

...