Question

I'm using SharpPcap to capture packets.

I'm trying to get Traffic Class value and I'm using udp.ipv6.TrafficClass.ToString().

the problem that I'm getting this exception:

Object reference not set to an instance of an object.

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());
        }
   }
}
Was it helpful?

Solution

That exception means that either udp, udp.ipv6 or udp.ipv6.TrafficClass is null. You need to check:

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

OTHER TIPS

What I think is happening here is that you're actually only checking every other packet.

You don't need the second packet = device.GetNextPacket(); because packet is already being assigned at the top of your while loop.

Try this and see if you still get an exception:

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());
        }
   }
}


If you're still getting an exception then it's most likely because you're not getting a valid ipv6 packet.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top