AttributeError: 'module' object has no attribute 'ipv4_cksum
Bonjour,
J'utilise le module PCS (Packets Construction Set) pour construire des packets ICMPv6. J'ai installé ce module via la commande apt-get install sur le dernier Ubuntu 32 bits. Le module semble bien installé puisque je m'en sert plusieurs fois dans mon programme.
Dans mon programme, une des lignes appel une méthode d'une des classes du module qui elle même appelle une autre méthode d'une autre classes.
Pour faire simple, j'appelle la méthode "icmp6.cksum()" qui est dans la classe "pcs.packets.icmp6". Cette méthode appelle la "méthode ipv4_cksum(pkt)" qui est dans la classe "pcs.packets.ipv4".
Cependant quand j’exécute mon code, il y a une erreur située dans la classe icmp6 qui dit : AttributeError: 'module' object has no attribute 'ipv4_cksum.
Je ne comprend pas pourquoi car cette méthode existe bien dans la classe ipv4. Le fait que la méthode ipv4_cksum soit définie comme static est il en cause ?
Pour résumé:
Dans mon programme
Code:
icmp6.checksum = icmp6.cksum(ip6)
Dans la fonction cksum de la classe icmp6
Code:
return pcs.packets.ipv4.ipv4_cksum(pkt)
Dans cette classe il y a bien au dessus "import pcs.packets.ipv4"
La méthode ipv4_cksum de la classe ipv4
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| def ipv4_cksum(bytes):
"""Static method to: Calculate and return the IPv4 header checksum
over the string of bytes provided."""
tmpbytes = bytes
total = 0
if len(tmpbytes) % 2 == 1:
tmpbytes += "\0"
for i in range(len(tmpbytes)/2):
total += (struct.unpack("!H", tmpbytes[2*i:2*i+2])[0])
total = (total >> 16) + (total & 0xffff)
total += total >> 16
return ~total & 0xffff
ipv4_cksum = staticmethod(ipv4_cksum) |
Message d'erreur :
Code:
1 2 3 4 5 6 7
| Traceback (most recent call last):
File "test2.py", line 49, in <module>
p.construct()
File "test2.py", line 40, in construct
icmp6.checksum = icmp6.cksum(ip6)
File "/usr/lib/python2.7/dist-packages/pcs/packets/icmpv6.py", line 147, in cksum
return pcs.packets.ipv4.ipv4_cksum(pkt) |
Merci beaucoup.