Comment vérifier la présence d'une couche dans un scapy paquet?

Comment puis-je vérifier la présence d'une couche particulière dans un scapy paquet? Par exemple, j'ai besoin de vérifier la src/dst champs de l'en-tête IP, comment puis-je savoir qu'un paquet a effectivement une en-tête IP (par opposition à l'IPv6 par exemple).

Mon problème est que quand je vais vérifier les IP de champ d'en-tête, je reçois un message d'erreur indiquant que la couche IP n'existe pas. Au lieu d'un en-tête IP, ce paquet avait IPv6.

pkt = Ether(packet_string)
if pkt[IP].dst == something:
  # do this

Mon erreur se produit lorsque j'essaie de faire référence à la couche IP. Comment puis-je vérifier pour que les couches de l'existence avant de tenter de la manipuler?

Merci!

De sorte que si une exception est levée? Il suffit de le rattraper et de refonte à ce que vous savez maintenant qu'il est.
Alors que cela fonctionne, est-ce quelque chose que vous auriez normalement voulez faire? Je veux dire en utilisant des exceptions pour gérer les cas qui ne sont pas vraiment "exceptionnelles". Bien sûr, c'est une question sur son propre. Je vais quitter cette ouvert pendant un certain temps pour voir si il y a un réel scapy solution. Merci bien!
Il est tout à fait Pythonic. Le surnom est, "il vaut mieux demander pardon que la permission." La bibliothèque Python lui-même (et son homologue en C) utilise la même gestion des exceptions-comme-contrôle de la structure de l'idiome.
Eh bien, ça sonne bien pour moi. Je suis nouveau sur le Python, donc je n'avais pas eu beaucoup à cette exposition. À moins d'ajouter le code en était simple, comme le sont beaucoup de choses en Python. En tout cas, je continue d'attendre les réponses de scapy, mais j'apprécie la perspicacité.

OriginalL'auteur Mr. Shickadance | 2011-04-04