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
Dans la fonction cksum de la classe icmp6
Code : Sélectionner tout - Visualiser dans une fenêtre à part icmp6.checksum = icmp6.cksum(ip6)
Dans cette classe il y a bien au dessus "import pcs.packets.ipv4"
Code : Sélectionner tout - Visualiser dans une fenêtre à part return pcs.packets.ipv4.ipv4_cksum(pkt)
La méthode ipv4_cksum de la classe ipv4
Message d'erreur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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)
Merci beaucoup.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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)
Partager