Resalut,
Je me suis créé un fichier d’adresse F_RESEAUX rempli avec ce que tu as indiqué dans le message #6:
J’ai testé avec l’entrée ’test’Citation:
admin : 192.168.10.0 : 255.255.254.0
test : 194.25.78.0 : 255.255.255.0
sous_reseau(’test’) me renvoie un objet net dont l’affichage est 194.25.78.0/24 et le type <class 'ipaddr.IPv4Network'>
Ensuite la méthode iterhosts() de net donne une liste result
dont les éléments sont de type <class 'ipaddr.IPv4Address'>
result est
Code:[IPv4Address('194.25.78.1'), IPv4Address('194.25.78.2'), IPv4Address('194.25.78.3'), IPv4Address('194.25.78.4'), IPv4Address('194.25.78.5'), IPv4Address('194.25.78.6'), etc.
Ensuite tu veux itérer dans result et comparer chaque élément une_ip de result avec la liste contenue dans '/home/kevin/named2/hosts/admin'
pour diagnostiquer si une_ip se trouve ou pas dans cette liste.
Pour pouvoir comparer, tu fais str(une_ip)
Tu as choisi i.find(adresseip) pour comparer
Il y a plusieurs choses qui ne vont pas dans ton algorithme à partir de ce point.
1) pour chaque check(str(une_ip)) , tu ouvres le fichier '/home/kevin/named2/hosts/admin' , tu le lis, tu fais readlines()
Le fichier ne change pas d’une fois sur l’autre, c’est du travail inutile. Une fois que tu as memo, pas la peine de recréer cette liste pour chaque checking.
2) tu utilises readlines()
Mais cette méthode conserve les fins de ligne: ’\r’ et ’\n’ sont conservés dans chaque ligne de la liste obtenue.
Pour ne pas garder les fins de ligne, faire
Code:memo = fic.read().splitlines()
3) tu ouvres le fichier en mode ’rb’. A priori ça ne sert à rien dans ton cas. Ça n’est utile que lorsqu’on veut faire des traitements précis dans des fichiers, afin de tenir compte des fins de ligne précis ( soit '\n', soit ’\n’ soit ’\r\n’ selon la plateforme)
4) i.find(adresseip) ne donne pas un résultat True sur une valeur i unique.
renvoient toutes 0 (càdire trouvé)Code:
1
2
3
4
5
6
7 194.25.78.1.find(194.25.78.1) 194.25.78.1.find(194.25.78.10) 194.25.78.1.find(194.25.78.11) 194.25.78.1.find(194.25.78.12) 194.25.78.1.find(194.25.78.110) 194.25.78.1.find(194.25.78.111) 194.25.78.1.find(194.25.78.211)
i.find(adresseip) n’est pas la bonne méthode, mais tant que tu n’avais pas des valeurs dans memo sans ’\r\n’ tu ne pouvais pas faire i==adresseip
4) une fois que tu auras dans memo des chaînes qui pourront êre comparées à str(une_ip) c’est à dire adresseip, tu pourras éviter de tester la présence de adresseip dans memo en passant explicitement en revue tous les éléments de memo dans une boucle for.
5) Je n’ai pas compris à quoi est censé servir l’instruction result.__str__
Je n’ai observé aucun changement sur result à la suite de cette instruction. À mon avis elle n’a aucun effet. Car l’expression i.find(adresseip) marche aussi bien avec ou sans cette instruction result.__str__
Quelques autres points:
1)
Code:_, ip, masque = line.split(' : ')
2)
Code:
1
2 if net: result = list(net.iterhosts())
3)
au lieu de faire str(une_ip) plus loin, faire tout de suite
Code:result = map(str,list(net.iterhosts()))