Способ записи вывода модуля python в файл toml

Я пишу сканер на питоне, который будет собирать различную информацию о цели, такую ​​как открытые порты, информацию о версии и так далее. Также используется файл toml, содержащий параметры конфигурации для отдельных сканирований.

Мне нужен метод для сохранения результатов сканирования. Пока я использую класс, который содержит все целевые данные. Есть ли способ сохранить результаты в файле, чтобы библиотечные функции анализировали и распечатывали их по запросу?

В представлении toml я думаю о чем-то вроде

[target]
ip = xx.xx.xx.xx
  [target.os]
  os = 'win 10'
  Arch = 'x64'

  [target.ports]
  ports = ['1', '2']

    [target.ports.1]
    service = 'xxx'
    ver = '5.9'

Есть ли способ сбросить результаты сканирования в файл toml таким образом? Или есть другой метод, который мог бы работать лучше?


person pwnd_root    schedule 02.07.2020    source источник


Ответы (2)


Библиотека toml может сделать это за вас. Есть и другие, такие как json, pyyaml и т. д., которые работают примерно так же. В вашем примере вам сначала нужно будет сохранить информацию в словаре в следующем формате:

data = {
  "target": {
    "ip": "xx.xx.xx.xx",
    "os": {
      "os": "win 10",
      "Arch": "x64"
    },
    "ports": {
      "ports": ["1", "2"],
      "1": {
        "service": "xxx",
        "ver": "5.9",
      }
    } 
  }
}

Затем вы можете сделать:

import toml

toml_string = toml.dumps(data)  # Output to a string

output_file_name = "output.toml"
with open(output_file_name, "w") as toml_file:
    toml.dump(data, toml_file)

Точно так же вы также можете загружать файлы toml в формат словаря, используя:

import toml

toml_dict = toml.loads(toml_string)  # Read from a string

input_file_name = "input.toml"
with open(input_file_name) as toml_file:
    toml_dict = toml.load(toml_file)

Если вместо toml вы хотите использовать yaml или json, это так же просто, как заменить toml на yaml или json во всех командах. Все они используют одно и то же соглашение о вызовах.

person Mustafa Quraish    schedule 02.07.2020

Вы можете использовать эту трассировку стека для достижения того, что вы хотите сделать:

1. Возможно, вы могли бы извлечь данные класса в виде словаря с помощью этого метода.

2. Запишите это в файл с этим.

3. Оттуда загрузите его в преобразователь словаря в toml с помощью toml.dump с дополнительной информацией здесь< /а>

person Gunt.r    schedule 02.07.2020