3

我正在用 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 文件?还是有另一种方法可以做得更好?

4

2 回答 2

3

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您不想使用yamlor json,它就像在所有命令中替换tomlyamlor一样简单。json它们都使用相同的调用约定。

于 2020-07-02T07:25:21.497 回答
0

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

1.通过这个方法,你大概可以将类的数据提取为字典。

2.用这个把它写到一个文件中

3.从那里将其加载到字典到 toml 转换器中,并在此处toml.dump提供更多信息

于 2020-07-02T07:21:03.480 回答