Eyla
Eyla

Reputation: 5851

SharpPcap - A Packet Capture problem to extract information from the packet

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

Upvotes: 2

Views: 2357

Answers (2)

Ad Hoc
Ad Hoc

Reputation: 333

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.

Upvotes: 4

John Saunders
John Saunders

Reputation: 161773

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

Upvotes: 3

Related Questions