Фильтры в SharpPcap

Я пытаюсь отфильтровать только зонды и широковещательные кадры по Wi-Fi.

Использование Sharpcap.

((SharpPcap.AirPcap.AirPcapDevice)(device)).Filter = "wlan.fc.type eq 0";

не работает

то же самое с

((SharpPcap.AirPcap.AirPcapDevice)(device)).Filter = "wlan.fc.type == 0";

Эти строки, кажется, позволяют транслировать

((SharpPcap.AirPcap.AirPcapDevice)(device)).Filter = "broadcast";

но нужно действительно получить все управляемые кадры.


person Karl    schedule 10.05.2012    source источник
comment
Фильтры должны совпадать с теми, что используют tcpdump и wireshark, чтобы вы могли протестировать свои фильтры там, а затем использовать их с sharppcap. Работают ли эти фильтры в wirehark должным образом?   -  person Chris Morgan    schedule 10.05.2012
comment
Да, в wireshark они работают на 100%, и именно оттуда я взял фильтры.   -  person Karl    schedule 11.05.2012
comment
Другие фильтры, похоже, не работают, просто ничего не запускается, кажется, wlan.fc и т. Д.   -  person Karl    schedule 11.05.2012
comment
Я не думаю, что SharpPcap поддерживает это   -  person Tu Tran    schedule 17.05.2012


Ответы (1)


Я думаю, что ваша проблема заключается в следующем: Wireshark декодирует пакеты, поэтому, когда вы применяете эти фильтры, пакеты уже декодированы, поэтому они могут получить доступ к полю wlan.fc.type.

Основываясь на моем личном опыте и использовании SharpPcap, фильтр, который вы пытаетесь использовать, вычисляется по байту [], поэтому вам нужно быть более конкретным, чтобы убедиться, что он применяется правильно.

Например, я использовал этот фильтр для своей цели.

private const String filteringSV = "(ether[0:4] = 0x010CCD04)";

Кроме того, не забудьте установить фильтр только на уже открытом устройстве.

if (nicToUse != null)
         {
            try
            {
               nicToUse.OnPacketArrival -= OnPackectArrivalLive;
               nicToUse.OnPacketArrival += OnPackectArrivalLive;
               try
               {
                  if (nicToUse.Started)
                     nicToUse.StopCapture();
                  if (nicToUse.Opened)
                     nicToUse.Close();
               }
               catch (Exception)
               {
                  //no handling, just do it.
               }

               nicToUse.Open(OpenFlags.Promiscuous|OpenFlags.MaxResponsiveness,10);                 

               nicToUse.Filter = "(ether[0:4] = 0x010CCD04)";

               nicToUse.StartCapture();
            }
            catch (Exception ex)
            {
               throw new Exception(Resources.SharpPCapPacketsProducer_Start_Error_while_starting_online_capture_, ex);
            }
         }

Надеюсь, это помогло.

person Lorenzo Santoro    schedule 14.03.2013