views:

175

answers:

2

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());
        }
   }
}
+2  A: 

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();
}
John Saunders
+3  A: 

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.

Ad Hoc
Yes I'm still getting same exception !!!however Thank you for your help.
Eyla