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 : Sélectionner tout - Visualiser dans une fenêtre à part
icmp6.checksum  = icmp6.cksum(ip6)
Dans la fonction cksum de la classe icmp6
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : 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)
Message d'erreur :
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)
Merci beaucoup.