将Python模块输出写入Toml文件的方法

9
我正在使用Python编写一个扫描器,用于收集目标的各种信息,例如开放端口、版本信息等。同时,我还使用了一个包含单独扫描配置设置的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文件中?或者有没有其他更好的方法可以完成更好的工作?
2个回答

10

toml库可以帮助您完成此操作。还有其他类似的库,如jsonpyyaml等,它们的工作方式基本相同。在您的例子中,您需要首先将信息以以下格式存储在字典中:

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)

如果你想使用yamljson而不是toml,那么只需在所有命令中将toml替换为yamljson就可以了,它们都使用相同的调用约定。


0

您可以使用此堆栈跟踪来实现您想要做的事情:

1. 您可以通过this方法提取类的数据作为字典。

2. 使用this将其写入文件。

3. 然后使用toml.dump将其加载到字典到toml转换器中,更多信息请参见here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接