SharpPcap - проблема захвата пакета для извлечения информации из пакета - PullRequest
2 голосов
/ 21 апреля 2010

Я использую 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());
        }
   }
}

Ответы [ 2 ]

4 голосов
/ 22 апреля 2010

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

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

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

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.

3 голосов
/ 21 апреля 2010

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

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