2016-06-14 2 views
0

У меня есть ряд конфигураций брандмауэра, у которых есть очень плохое форматирование (fortinet), и мы пытаемся поместить все правила брандмауэра в таблицу Excel с колонками и строками с соответствующей информацией. Я помню, что мы могли использовать модуль python для этого, но я забыл его название при импорте. Любые эксперты могут предоставить некоторые указатели?Python Module для форматирования текстовых файлов

Брандмауэр конфигурационный файл выглядит следующим образом:

config firewall policy 1 
    edit eth1 
    set srcintf 33 
    set srcaddr 10.50.43.28 255.255.255.255 
    set dstintf 31 
    set dstaddr all 
    set schedule always 
    set service https 
    set action accept 
end 

config firewall policy 2 
    edit eth1 
    set srcintf 33 
    set srcaddr 10.50.45.28 255.255.255.255 
    set dstintf 31 
    set dstaddr all 
    set schedule always 
    set service https, ftp 
    set action accept 
end 

и конечный результат будет таблица (CSV файл)

Policy Name Source Address Destination Address Service Action 

1  10.50.43.28 255.255.255.255 all https accept 


2  10.50.45.28 255.255.255.255 all https, ftp accept 

Большое спасибо

+0

Возможно в напишите простой пользовательский парсер для таких файлов конфигурации, но тем не менее, возможно, посмотрите этот инструмент [Fortinet Config Parse Tool v0.3] (https://github.com/Fatal-Halt/FortiGate-Config-Parser) – davedwards

ответ

1

Вы должны проверить:

  • Python's open(), чтобы научиться читать и писать файлы
  • строку в Python .format(), чтобы узнать, как форматировать войти так, как вы хотите

Здесь следует, что я пришел с использованием Python3:

#!/usr/bin/env python3 
with open('log.txt', 'r') as log: 
    csv = 'Policy,Name Source Address,Destination Address,Service,Action\n' 
    policy_text = 'config firewall policy' 
    name_text = 'set srcaddr' 
    destination_text = 'set dstaddr' 
    service_text = 'set service' 
    action_text = 'set action' 

    def value(text, text_type): 
     return text.replace(text_type, '').strip() 

    for line in log.readlines(): 
     if policy_text in line: 
      policy = value(line, policy_text) 
     elif name_text in line: 
      name = value(line, name_text) 
     elif destination_text in line: 
      destination = value(line, destination_text) 
     elif service_text in line: 
      service = value(line, service_text) 
     elif action_text in line: 
      action = value(line, action_text) 
     elif 'end' in line: 
      csv = '{}"{}","{}","{}","{}","{}"\n'.format(
      csv, policy, name, destination, service, action) 

    with open('log.csv', 'w') as final_log: 
     print(csv, file=final_log) 
Смежные вопросы