Cà plante à la ligne "headers = line.split(' = ')[1][1:-1].split()".
Et çà veut juste dire que "line" n'est pas de la forme rule = 'log icmp 10.0.0.1 any -> 10.0.0.2 80' ou que votre fichier ne contient pas que des lignes sous cette forme là.
- W
Version imprimable
Cà plante à la ligne "headers = line.split(' = ')[1][1:-1].split()".
Et çà veut juste dire que "line" n'est pas de la forme rule = 'log icmp 10.0.0.1 any -> 10.0.0.2 80' ou que votre fichier ne contient pas que des lignes sous cette forme là.
- W
Mais mon fichier contient que ça : rule = 'alert tcp 10.0.0.1 any -> 10.0.0.3 80'
rule = 'log icmp 10.0.0.1 any -> 10.0.0.2 80'
rule = 'alert udp 10.0.0.1 any -> 10.0.0.2 21'
rule = 'alert udp 10.0.0.0/30 any -> 10.0.0.4 21'
par contre si j’enlève la dernière ligne(rule = 'alert udp 10.0.0.0/30 any -> 10.0.0.4 21') de mon fichier et je change mon code :ça marche normal mais le problème c'est que mon fichier doit contenir aussi ce type de règle rule = 'alert udp 10.0.0.0/30 any -> 10.0.0.4 21' et cette expression ce n'est pour elle ('^rule\s*=\s*[\'\"](.+?)\s*[\'\"]\s*$' , Que dois je faire ? pour que mon programme puisse lire les deux types de règles ???Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 res = re.search('^rule\s*=\s*[\'\"](.+?)\s*[\'\"]\s*$', line) if res : #dictionnaire ,group: chercher par groupe header = res.group(1) #print (header) headers = header.split() #print(headers) rule = { 'action':headers[0], 'protocol':headers[1], 'srcaddresses':headers[2], 'srcports':headers[3], 'direction':headers[4], 'dstaddresses':headers[5], 'dstports':headers[6], }
Je ne vois pas d'instruction qui ressemble à headers = line.split(' = ')[1][1:-1].split() dans le dernier code que vous avez posté.
Ceci dit, là encore, vous pouvez lancer la console Python et vérifier par vous même:
que le problème n'est ni dans les règles analysées ni dans la regexp.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 >>> data = '''rule = 'alert tcp 10.0.0.1 any -> 10.0.0.3 80' ... rule = 'log icmp 10.0.0.1 any -> 10.0.0.2 80' ... rule = 'alert udp 10.0.0.1 any -> 10.0.0.2 21' ... rule = 'alert udp 10.0.0.0/30 any -> 10.0.0.4 21'""" >>> for line in data.splitlines(): ... print (line.split(' = ')[1][1:-1].split()) ... ['alert', 'tcp', '10.0.0.1', 'any', '->', '10.0.0.3', '80'] ['log', 'icmp', '10.0.0.1', 'any', '->', '10.0.0.2', '80'] ['alert', 'udp', '10.0.0.1', 'any', '->', '10.0.0.2', '21'] ['alert', 'udp', '10.0.0.0/30', 'any', '->', '10.0.0.4', '21'] >>> for line in data.splitlines(): ... print(re.search('^rule\s*=\s*[\'\"](.+?)\s*[\'\"]\s*$', line).group(1).s plit()) ... ['alert', 'tcp', '10.0.0.1', 'any', '->', '10.0.0.3', '80'] ['log', 'icmp', '10.0.0.1', 'any', '->', '10.0.0.2', '80'] ['alert', 'udp', '10.0.0.1', 'any', '->', '10.0.0.2', '21'] ['alert', 'udp', '10.0.0.0/30', 'any', '->', '10.0.0.4', '21'] >>>
- W
Ah Oui c'est bon ça marche maintenant , je vous remercie pour votre patience et de m'avoir aidé merci merci beaucoup :) :) :)