문제

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());
        }
   }
}
도움이 되었습니까?

해결책

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

다른 팁

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.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top