2010-04-21 28 views
2

J'utilise SharpPcap pour capturer des paquets.SharpPcap - Un problème de capture de paquets pour sortir des informations du paquet

J'essaie d'obtenir une valeur de classe de trafic et j'utilise udp.ipv6.TrafficClass.ToString().

le problème que je reçois cette exception:

Référence de l'objet fixe pas à une instance d'un objet.

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

BTW, ce n'est pas une "erreur"; c'est une "exception". –

+0

Merci de mentionner que :) – Eyla

Répondre

3

Cette exception signifie que soit udp, udp.ipv6 ou udp.ipv6.TrafficClass est nulle. Vous devez vérifier:

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

Bonne réponse. Si SharpPcap ne peut pas analyser quelque chose, il renvoie automatiquement la valeur null. Ex, si vous capturez un paquet TCP et essayez de l'analyser comme UDP, vous obtiendrez null. Assurez-vous que les filtres sont correctement définis, puis vérifiez que les paquets sont capturés pour la valeur null avant d'analyser la charge utile/l'en-tête/les champs pour éviter toute exception. –

4

Ce que je pense qu'il se passe ici, c'est que vous êtes en train de vérifier tous les autres paquets.

Vous n'avez pas besoin du second packet = device.GetNextPacket(); parce que packet est déjà assigné en haut de votre boucle while.

Essayez et voir si vous obtenez toujours une 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()); 
     } 
    } 
} 


Si vous obtenez toujours une exception, alors il est plus probable parce que vous n'êtes pas obtenir un paquet de ipv6 valide.

+0

Oui, je reçois toujours la même exception !!! Cependant, merci pour votre aide. – Eyla