Pregunta

Estoy usando SharpPcap a capturar paquetes.

Estoy tratando de obtener el valor de clase de tráfico y estoy usando udp.ipv6.TrafficClass.ToString ().

el problema que estoy recibiendo esta excepción:

Referencia a objeto no establecida como una instancia de un objeto.

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());
        }
   }
}
¿Fue útil?

Solución

Eso significa que, o bien de excepción udp, udp.ipv6 o udp.ipv6.TrafficClass es nulo. Es necesario comprobar:

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

Otros consejos

Lo que creo que está sucediendo aquí es que en realidad estás comprobando únicamente cada dos paquetes.

no es necesario porque el segundo packet = device.GetNextPacket(); packet ya se le ha asignado en la parte superior de su bucle while.

Intenta lo siguiente y si usted todavía consigue una excepción:

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


Si todavía está recibiendo una excepción, entonces es más probable debido a que no está recibiendo un paquete IPv6 válida.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top