SharpPcap - проблема захвата пакетов для извлечения информации из пакета

StackOverflow https://stackoverflow.com/questions/2685714

  •  30-09-2019
  •  | 
  •  

Вопрос

Я использую SharpPcap для захвата пакетов.

Я пытаюсь получить значение класса трафика, и я использую udp.ipv6.trafficclass.tostring ().

Проблема, которую я получаю это исключение:

В экземпляре объекта не задана ссылка на объект.

private void packetCapturingThreadMethod()
{

   Packet packet = null;

   while ((packet = device.GetNextPacket()) != null)
   {
        packet = device.GetNextPacket();

        if (packet is UDPPacket)
        {
            UDPPacket udp = (UDPPacket)packet;

            MessageBox.Show(udp.ipv6.TrafficClass.ToString());
        }
   }
}
Это было полезно?

Решение

Что исключение означает, что либо либо udp, udp.ipv6 или udp.ipv6.TrafficClass нулевой. Вам нужно проверить:

if (udp != null && udp.ipv6 != null && udp.ipv6.TrafficClass != null)
{
    MessageBox.Show(udp.ipv6.TrafficClass.ToString();
}

Другие советы

Что я думаю, здесь происходит то, что вы на самом деле проверяете только каждый другой пакет.

Вам не нужен второй packet = device.GetNextPacket(); потому что packet уже назначается в верхней части вашего цикла.

Попробуйте это и посмотрите, если вы все еще получите исключение:

private void packetCapturingThreadMethod()
{

   Packet packet = null;

   while ((packet = device.GetNextPacket()) != null)
   {
        if (packet is UDPPacket)
        {
            UDPPacket udp = (UDPPacket)packet;

            MessageBox.Show(udp.ipv6.TrafficClass.ToString());
        }
   }
}


Если вы все еще получаете исключение, то это, скорее всего, вы не получаете допустимый пакет IPv6.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top