Domanda

sto usando SharpPcap ai pacchetti di cattura.

Sto cercando di ottenere il valore di classe di traffico e sto usando udp.ipv6.TrafficClass.ToString ().

il problema che sto ricevendo questa eccezione:

Il riferimento non impostato a un'istanza di un oggetto.

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());
        }
   }
}
È stato utile?

Soluzione

Ciò significa eccezione che o udp, udp.ipv6 o udp.ipv6.TrafficClass è nullo. È necessario controllare:

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

Altri suggerimenti

Quello che penso che sta accadendo qui è che in realtà si sta solo controllando ogni altro pacchetto.

Non è necessario il secondo packet = device.GetNextPacket(); perché packet è già stato assegnato nella parte superiore del vostro ciclo while.

Prova questo e vedere se è ancora ottenere un'eccezione:

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


Se si sta ancora ricevendo un'eccezione, allora è più probabile perché non stai ricevendo un pacchetto IPv6 valido.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top