2016-09-08 1 views
1

Je le code suivant:Besoin d'aide pour décoder les résultats de scapy.sr1 pour IPv4 et IPv6

ans4 = sr1(IP(dst=hostname)/ICMP()) 
ans6 = sr1(IPv6(dst=hostname)/ICMPv6EchRequest()) 

Je suis en train d'analyser le contenu de ans4 et ans6. En particulier, j'aimerais savoir si hostname a réellement répondu par une réponse ping. Je vois ans4.show() et ans6.show() et ans6.summary() et ans6.summary() et un tas d'autres méthodes et attributs, mais je n'arrive pas à trouver ce que je cherche. Je peux analyser repr (ans), qui est une chaîne, mais est-ce la meilleure façon de le faire?

+0

IP n'utilise pas les noms d'hôtes. DNS est utilisé pour résoudre les noms d'hôtes en adresses IP et les adresses IP sont utilisées pour la communication. Regarder les paquets capturés montrera les adresses IP. –

Répondre

1

La question est un peu vaguement demandé, mais si je vous ai raison - cela devrait faire le travail:

>>> hostname = 'www.google.com' 
>>> ans,unans=sr(IP(dst=hostname)/ICMP()) 
Begin emission: 
.......Finished to send 1 packets. 
..* 
Received 10 packets, got 1 answers, remaining 0 packets 
>>> ans.summary(lambda(s,r): r.sprintf("%IP.src% : %ICMP.type%")) 
216.58.208.100 : echo-reply 
+0

Je connais les méthodes .show et .summary. Ce que je cherche est quelque chose qui va décoder les champs dans les paquets. En ce moment, je vais appeler repr (ans4) et repr (ans6), puis analyser les chaînes résultantes. Et cela fonctionne, mais cela me semble fragile et compliqué. – user1928764

+0

Quel champ exactement vous voulez décoder? Réponses ICMP? Ils sont juste différents types. Si vous voulez obtenir ceci, vous pouvez simplement utiliser: pour s, r dans ans: r [ICMP] .type –