2016-07-22 23 views
1

Ich analysiere DNS-Pakete mit scapy. Nicht alle DNS-Antwortdatensätze enthalten alle Felder. Zum Beispiel, einige Antworten haben nicht rdata soÜberprüfen, ob das Feld im DNS-Datensatz mit scapy existiert

answer = packet.an[0].rdata 

Ergebnisse in dem Fehler:

AttributeError: rdata 

Gibt es eine Möglichkeit der Prüfung, ob das rdata Feld in einer Antwortsatz vorhanden ist? Ich weiß, dass Sie nach Schichten

if packet.haslayer(DNS): 
    <code> 

überprüfen können, so dass Sie nicht nach Schichten fragen, die nicht existieren. Gibt es eine Parallele für Felder innerhalb von Layern?

Antwort

1

Sie könnten immer versuchen - außer. Vielleicht nicht so glatt wie das, wonach Sie suchen.

try: 
    answer = packet.an[0].rdata 
except AttributeError: 
    # do something