Bonjour à tous,
Dans le cadre du boulot, j'essaye de me simplifier la vie en codant une map du reseau interne selon des données déjà collectées et présentes dans une base MySQL.
J'essaye d'utiliser python en mode Objet (il faut bien commencer un jour), mais je me retrouve bloqué par des choses que je soupçonnes être basiques mais qui me bloque complêtement.
En gros et pour faire simple, je cherche a avoir un objet Host qui va contenir une liste d'objet Interface qui vont elles même contenir chacune une liste de Gifs.
Cela me donne ceci :
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
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80 import MySQLdb class Host: def __init__(self, nom, type="", interfaces=[]): self.nom = nom self.type = type self.interfaces = interfaces self.populateInts() def populateInts(self): req="select nomInt, ipInt, maskInt from Interface where nomHost = '"+self.nom+"'" connection = MySQLdb.connect(host=servername, user=username, passwd=password, db=dbname, port=port) c = connection.cursor() intList = c.execute(req) intList = c.fetchall() ## TENTATIVE DE DEBUG ## print print self.nom print intList print print ########################### for int in intList: self.interfaces.append(Interface(int[0], int[1], int[2], self.nom)) c.close() connection.close() class Interface: def __init__(self, nom, ip='0.0.0.0', mask='0.0.0.0', host="", gifs=[]): self.nom = nom self.ip = ip self.mask = mask self.host = host self.gifs = gifs self.populateGifs() def populateGifs(self): req="select nomGif, hostSrcIp, ipSrc, hostDest, hostDestIp, ipDest, etatGif, costGif, maskGif from Gif where nomInt = '"+self.nom+"' and nomHost = '"+self.host+"'" connection = MySQLdb.connect(host=servername, user=username, passwd=password, db=dbname, port=port) c = connection.cursor() gifList = c.execute(req) gifList = c.fetchall() for gif in gifList: self.gifs.append(Gif(gif[0], gif[1], gif[2], gif[3], gif[4], gif[5], gif[6], gif[7], gif[8], self.host, self.nom)) c.close() connection.close() class Gif: def __init__(self, nom, hostSrcIp='0.0.0.0', ipSrc='0.0.0.0', hostDest="", hostDestIp='0.0.0.0', ipDest='0.0.0.0', etat='', cost='', mask='', host="", int=""): self.nom = nom self.hostSrcIp = hostSrcIp self.ipSrc = ipSrc self.hostDest = hostDest self.hostDestIp = hostDestIp self.ipDest = ipDest self.etat = etat self.cost = cost self.mask = mask self.host = host self.int = int h = Host('router1') h2 = Host('router2') ## TENTATIVE DE DEBUG ## print h.nom print len(h.interfaces) for i in h.interfaces: print "\t"+i.nom+" => "+str(len(i.gifs)) print h2.nom print len(h2.interfaces) for i in h2.interfaces: print "\t"+i.nom+" => "+str(len(i.gifs)) ##########################
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
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55 ## ici ce sont les resultats printés dans la methode populateInts, on y voit des interfaces bien differentes : router1 (('lo0', 'XX.XX.XX.XX', ''), ('enc0', '', ''), ('pflog0', '', ''), ('fxp1', 'XX.XX.XX.XX', '0xfffffff8'), ('fxp0', 'XX.XX.XX.XX', '0xffffff00'), ('fxp3', 'XX.XX.XX.XX', '0xfffffff8'), ('fxp4', 'XX.XX.XX.XX', '0xfffffff8'), ('fxp2', 'XX.XX.XX.XX', '0xfffffff8'), ('fxp5', 'XX.XX.XX.XX', '0xffffff00'), ('pfsync0', '', '')) gwbld3 (('lo0', '127.0.0.1', ''), ('enc0', '', ''), ('pflog0', '', ''), ('fxp1', '', ''), ('fxp3', '', ''), ('fxp0', 'XX.XX.XX.XX', '0xffffff00'), ('fxp2', 'XXX.XXX.XXX.XXX', '0xfffffff8'), ('fxp5', '', ''), ('fxp4', '', ''), ('pfsync0', '', '')) ## ici ce qui est printé en fin de programme, on dirait que la liste self.interfaces est commune à mes deux instances : gwbld2 20 lo0 => 35 enc0 => 35 pflog0 => 35 fxp1 => 35 fxp0 => 35 fxp3 => 35 fxp4 => 35 fxp2 => 35 fxp5 => 35 pfsync0 => 35 lo0 => 35 enc0 => 35 pflog0 => 35 fxp1 => 35 fxp3 => 35 fxp0 => 35 fxp2 => 35 fxp5 => 35 fxp4 => 35 pfsync0 => 35 gwbld3 20 lo0 => 35 enc0 => 35 pflog0 => 35 fxp1 => 35 fxp0 => 35 fxp3 => 35 fxp4 => 35 fxp2 => 35 fxp5 => 35 pfsync0 => 35 lo0 => 35 enc0 => 35 pflog0 => 35 fxp1 => 35 fxp3 => 35 fxp0 => 35 fxp2 => 35 fxp5 => 35 fxp4 => 35 pfsync0 => 35
On dirait que ma liste d'interfaces est commune aux 2 Host.
Et que la liste de gifs est commune à tous les objets Interface.
Quelqu'un saurait-il me dire si mon raisonnement est bon, et du coup ce qui ne va pas dans ma façon de faire.
Car les attributs de type string sont uniques à chaque instance mais par contre mes listes ne le sont pas, Pourquoi donc ?
Merci à toi, qui à pris le temps de lire et peu-être même le temps de répondre![]()
Partager