SharpPcap - Un Paquete problema de captura para extraer información del paquete
-
30-09-2019 - |
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());
}
}
}
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.