【发布时间】:2019-12-31 06:00:30
【问题描述】:
我是编程新手,目前正在尝试将 NMAP XML 解析为 CSV。 当我打开 CSV 文件时,我发现行数超出了应有的数量。
谁能告诉我我在下面的代码中做错了什么?
from libnmap.parser import NmapParser
import os
import csv
report = 'nmap_results.xml'
with open('nmap_results.csv', 'w') as output_file:
writer = csv.writer(output_file)
for filename in report:
nmap_report = NmapParser.parse_fromfile(report)
for host in nmap_report.hosts:
row = []
for hostname in host.hostnames:
row.append('{}'.format(hostname))
row.append('{}'.format(host.address))
for serv in host.services:
row.append(serv.port)
writer.writerow(row)
这是 CSV 的输出:
yahoo.com,media-router-fp1.prod1.media.vip.gq1.yahoo.com,98.137.246.7,53,80,443
red.com,server-13-249-188-122.bos50.r.cloudfront.net,13.249.188.122,53,80,443
google.com,172.18.128.1,53,80,443
cnn.com,151.101.1.67,53
yahoo.com,media-router-fp1.prod1.media.vip.gq1.yahoo.com,98.137.246.7,53,80,443
red.com,server-13-249-188-122.bos50.r.cloudfront.net,13.249.188.122,53,80,443
google.com,172.18.128.1,53,80,443
cnn.com,151.101.1.67,53
yahoo.com,media-router-fp1.prod1.media.vip.gq1.yahoo.com,98.137.246.7,53,80,443
red.com,server-13-249-188-122.bos50.r.cloudfront.net,13.249.188.122,53,80,443
google.com,172.18.128.1,53,80,443
【问题讨论】:
-
您可能缺少导入...不确定
NmapParser is是什么。你也在迭代一个字符串。report是一个字符串。所以你的代码用英文写着:for each character in this string, do this task你的意思是把report放在一个列表中吗? -
对不起,重要的是你我只是编辑我原来的问题。 NmapParser 来自 libnmap libnmap.readthedocs.io/en/latest/index.html 我只想将 Nmap 结果保存到 CSV,这就是我现在能够做到的方式,但它会将结果多次写入 CSV。
-
有 4 个条目用于测试目的。
-
是的,但是您要多次重复该任务,以 @MattR 点。您正在迭代
report这是一个字符串,并且对于该字符串的每个字符,您正在执行写入文件的功能。老实说,您似乎不需要遍历report并且可以废弃整个for-loop。 -
我看到的只是
for filename in report:,但在循环中没有对文件名的未来引用(相反,您参考下一行的报告)。