Python脚本没有附加我的csv与解析的xml数据,没有错误

2024-05-21 12:51:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图解析来自国家漏洞数据库(NVD)的xml数据,以便隔离远程可执行的漏洞(访问向量=网络)。你知道吗

在这里,我按照其他问题来解析xml,并用所需的数据附加一个csv。我没有收到任何错误消息,但我的简历没有附加任何数据。这是因为我的“findall”方法找不到任何东西吗?我没有收到任何错误消息。非常感谢您的帮助!你知道吗

树中我需要的信息是1)entry ID属性和2)访问向量元素地址:

<nvd>
    <entry id="CVE-2018-0001">
        <vuln:cvss>
            <cvss:base_metrics>
                <cvss:access-vector>NETWORK</cvss:access-vector>
            </cvss:base_metrics>
        </vuln:cvss>
    </entry>
</nvd>    

我的xml数据片段(它包含根、一个子级和该子级的所有子级):

<?xml version='1.0' encoding='UTF-8'?>
<nvd xmlns:vuln="http://scap.nist.gov/schema/vulnerability/0.4" xmlns:patch="http://scap.nist.gov/schema/patch/0.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:cpe-lang="http://cpe.mitre.org/language/2.0" xmlns="http://scap.nist.gov/schema/feed/vulnerability/2.0" xmlns:scap-core="http://scap.nist.gov/schema/scap-core/0.1" xmlns:cvss="http://scap.nist.gov/schema/cvss-v2/0.2" nvd_xml_version="2.0" pub_date="2018-03-07T03:00:00" xsi:schemaLocation="http://scap.nist.gov/schema/patch/0.1 https://scap.nist.gov/schema/nvd/patch_0.1.xsd http://scap.nist.gov/schema/feed/vulnerability/2.0 https://scap.nist.gov/schema/nvd/nvd-cve-feed_2.0.xsd http://scap.nist.gov/schema/scap-core/0.1 https://scap.nist.gov/schema/nvd/scap-core_0.1.xsd">
  <entry id="CVE-2018-0001">
    <vuln:vulnerable-configuration id="http://nvd.nist.gov/">
      <cpe-lang:logical-test operator="OR" negate="false">
        <cpe-lang:fact-ref name="cpe:/o:juniper:junos:12.1x46:d10"/>
        <cpe-lang:fact-ref name="cpe:/o:juniper:junos:12.1x46:d15"/>
        <cpe-lang:fact-ref name="cpe:/o:juniper:junos:12.1x46:d20"/>
        <cpe-lang:fact-ref name="cpe:/o:juniper:junos:12.1x46:d25"/>
        <cpe-lang:fact-ref name="cpe:/o:juniper:junos:12.1x46:d30"/>
        <cpe-lang:fact-ref name="cpe:/o:juniper:junos:12.1x46:d35"/>
        <cpe-lang:fact-ref name="cpe:/o:juniper:junos:12.1x46:d40"/>
        <cpe-lang:fact-ref name="cpe:/o:juniper:junos:12.1x46:d45"/>
        <cpe-lang:fact-ref name="cpe:/o:juniper:junos:12.1x46:d50"/>
        <cpe-lang:fact-ref name="cpe:/o:juniper:junos:12.1x46:d55"/>
        <cpe-lang:fact-ref name="cpe:/o:juniper:junos:12.1x46:d60"/>
        <cpe-lang:fact-ref name="cpe:/o:juniper:junos:12.1x46:d65"/>
      </cpe-lang:logical-test>
    </vuln:vulnerable-configuration>
    <vuln:vulnerable-configuration id="http://nvd.nist.gov/">
      <cpe-lang:logical-test operator="OR" negate="false">
        <cpe-lang:fact-ref name="cpe:/o:juniper:junos:12.3x48:d10"/>
        <cpe-lang:fact-ref name="cpe:/o:juniper:junos:12.3x48:d15"/>
        <cpe-lang:fact-ref name="cpe:/o:juniper:junos:12.3x48:d20"/>
        <cpe-lang:fact-ref name="cpe:/o:juniper:junos:12.3x48:d25"/>
        <cpe-lang:fact-ref name="cpe:/o:juniper:junos:12.3x48:d30"/>
      </cpe-lang:logical-test>
    </vuln:vulnerable-configuration>
    <vuln:vulnerable-configuration id="http://nvd.nist.gov/">
      <cpe-lang:logical-test operator="OR" negate="false">
        <cpe-lang:fact-ref name="cpe:/o:juniper:junos:15.1x49:d10"/>
        <cpe-lang:fact-ref name="cpe:/o:juniper:junos:15.1x49:d20"/>
        <cpe-lang:fact-ref name="cpe:/o:juniper:junos:15.1x49:d30"/>
      </cpe-lang:logical-test>
    </vuln:vulnerable-configuration>
    <vuln:vulnerable-configuration id="http://nvd.nist.gov/">
      <cpe-lang:logical-test operator="OR" negate="false">
        <cpe-lang:fact-ref name="cpe:/o:juniper:junos:15.1x53:d20"/>
        <cpe-lang:fact-ref name="cpe:/o:juniper:junos:15.1x53:d21"/>
        <cpe-lang:fact-ref name="cpe:/o:juniper:junos:15.1x53:d25"/>
        <cpe-lang:fact-ref name="cpe:/o:juniper:junos:15.1x53:d30"/>
        <cpe-lang:fact-ref name="cpe:/o:juniper:junos:15.1x53:d32"/>
        <cpe-lang:fact-ref name="cpe:/o:juniper:junos:15.1x53:d33"/>
        <cpe-lang:fact-ref name="cpe:/o:juniper:junos:15.1x53:d34"/>
        <cpe-lang:fact-ref name="cpe:/o:juniper:junos:15.1x53:d60"/>
        <cpe-lang:fact-ref name="cpe:/o:juniper:junos:15.1x53:d61"/>
        <cpe-lang:fact-ref name="cpe:/o:juniper:junos:15.1x53:d62"/>
        <cpe-lang:fact-ref name="cpe:/o:juniper:junos:15.1x53:d63"/>
      </cpe-lang:logical-test>
    </vuln:vulnerable-configuration>
    <vuln:vulnerable-configuration id="http://nvd.nist.gov/">
      <cpe-lang:logical-test operator="OR" negate="false">
        <cpe-lang:fact-ref name="cpe:/o:juniper:junos:14.1"/>
        <cpe-lang:fact-ref name="cpe:/o:juniper:junos:14.1:r1"/>
        <cpe-lang:fact-ref name="cpe:/o:juniper:junos:14.1:r2"/>
        <cpe-lang:fact-ref name="cpe:/o:juniper:junos:14.1:r3"/>
        <cpe-lang:fact-ref name="cpe:/o:juniper:junos:14.1:r4"/>
        <cpe-lang:fact-ref name="cpe:/o:juniper:junos:14.1:r8"/>
        <cpe-lang:fact-ref name="cpe:/o:juniper:junos:14.1:r9"/>
      </cpe-lang:logical-test>
    </vuln:vulnerable-configuration>
    <vuln:vulnerable-configuration id="http://nvd.nist.gov/">
      <cpe-lang:logical-test operator="OR" negate="false">
        <cpe-lang:fact-ref name="cpe:/o:juniper:junos:14.2:r1"/>
        <cpe-lang:fact-ref name="cpe:/o:juniper:junos:14.2:r2"/>
        <cpe-lang:fact-ref name="cpe:/o:juniper:junos:14.2:r3"/>
        <cpe-lang:fact-ref name="cpe:/o:juniper:junos:14.2:r4"/>
        <cpe-lang:fact-ref name="cpe:/o:juniper:junos:14.2:r5"/>
        <cpe-lang:fact-ref name="cpe:/o:juniper:junos:14.2:r7"/>
        <cpe-lang:fact-ref name="cpe:/o:juniper:junos:14.2:r8"/>
      </cpe-lang:logical-test>
    </vuln:vulnerable-configuration>
    <vuln:vulnerable-configuration id="http://nvd.nist.gov/">
      <cpe-lang:logical-test operator="OR" negate="false">
        <cpe-lang:fact-ref name="cpe:/o:juniper:junos:15.1:r1"/>
        <cpe-lang:fact-ref name="cpe:/o:juniper:junos:15.1:r2"/>
      </cpe-lang:logical-test>
    </vuln:vulnerable-configuration>
    <vuln:vulnerable-configuration id="http://nvd.nist.gov/">
      <cpe-lang:logical-test operator="OR" negate="false">
        <cpe-lang:fact-ref name="cpe:/o:juniper:junos:12.3"/>
        <cpe-lang:fact-ref name="cpe:/o:juniper:junos:12.3:r1"/>
        <cpe-lang:fact-ref name="cpe:/o:juniper:junos:12.3:r10"/>
        <cpe-lang:fact-ref name="cpe:/o:juniper:junos:12.3:r2"/>
        <cpe-lang:fact-ref name="cpe:/o:juniper:junos:12.3:r3"/>
        <cpe-lang:fact-ref name="cpe:/o:juniper:junos:12.3:r4"/>
        <cpe-lang:fact-ref name="cpe:/o:juniper:junos:12.3:r5"/>
        <cpe-lang:fact-ref name="cpe:/o:juniper:junos:12.3:r6"/>
        <cpe-lang:fact-ref name="cpe:/o:juniper:junos:12.3:r7"/>
        <cpe-lang:fact-ref name="cpe:/o:juniper:junos:12.3:r8"/>
        <cpe-lang:fact-ref name="cpe:/o:juniper:junos:12.3:r9"/>
      </cpe-lang:logical-test>
    </vuln:vulnerable-configuration>
    <vuln:vulnerable-configuration id="http://nvd.nist.gov/">
      <cpe-lang:logical-test operator="OR" negate="false">
        <cpe-lang:fact-ref name="cpe:/o:juniper:junos:14.1x53"/>
        <cpe-lang:fact-ref name="cpe:/o:juniper:junos:14.1x53:d10"/>
        <cpe-lang:fact-ref name="cpe:/o:juniper:junos:14.1x53:d15"/>
        <cpe-lang:fact-ref name="cpe:/o:juniper:junos:14.1x53:d16"/>
        <cpe-lang:fact-ref name="cpe:/o:juniper:junos:14.1x53:d25"/>
        <cpe-lang:fact-ref name="cpe:/o:juniper:junos:14.1x53:d26"/>
        <cpe-lang:fact-ref name="cpe:/o:juniper:junos:14.1x53:d27"/>
        <cpe-lang:fact-ref name="cpe:/o:juniper:junos:14.1x53:d35"/>
        <cpe-lang:fact-ref name="cpe:/o:juniper:junos:14.1x53:d50"/>
      </cpe-lang:logical-test>
    </vuln:vulnerable-configuration>
    <vuln:vulnerable-software-list>
      <vuln:product>cpe:/o:juniper:junos:12.1x46:d10</vuln:product>
      <vuln:product>cpe:/o:juniper:junos:12.1x46:d15</vuln:product>
      <vuln:product>cpe:/o:juniper:junos:12.1x46:d20</vuln:product>
      <vuln:product>cpe:/o:juniper:junos:12.1x46:d25</vuln:product>
      <vuln:product>cpe:/o:juniper:junos:12.1x46:d30</vuln:product>
      <vuln:product>cpe:/o:juniper:junos:12.1x46:d35</vuln:product>
      <vuln:product>cpe:/o:juniper:junos:12.1x46:d40</vuln:product>
      <vuln:product>cpe:/o:juniper:junos:12.1x46:d45</vuln:product>
      <vuln:product>cpe:/o:juniper:junos:12.1x46:d50</vuln:product>
      <vuln:product>cpe:/o:juniper:junos:12.1x46:d55</vuln:product>
      <vuln:product>cpe:/o:juniper:junos:12.1x46:d60</vuln:product>
      <vuln:product>cpe:/o:juniper:junos:12.1x46:d65</vuln:product>
      <vuln:product>cpe:/o:juniper:junos:12.3</vuln:product>
      <vuln:product>cpe:/o:juniper:junos:12.3:r1</vuln:product>
      <vuln:product>cpe:/o:juniper:junos:12.3:r10</vuln:product>
      <vuln:product>cpe:/o:juniper:junos:12.3:r2</vuln:product>
      <vuln:product>cpe:/o:juniper:junos:12.3:r3</vuln:product>
      <vuln:product>cpe:/o:juniper:junos:12.3:r4</vuln:product>
      <vuln:product>cpe:/o:juniper:junos:12.3:r5</vuln:product>
      <vuln:product>cpe:/o:juniper:junos:12.3:r6</vuln:product>
      <vuln:product>cpe:/o:juniper:junos:12.3:r7</vuln:product>
      <vuln:product>cpe:/o:juniper:junos:12.3:r8</vuln:product>
      <vuln:product>cpe:/o:juniper:junos:12.3:r9</vuln:product>
      <vuln:product>cpe:/o:juniper:junos:12.3x48:d10</vuln:product>
      <vuln:product>cpe:/o:juniper:junos:12.3x48:d15</vuln:product>
      <vuln:product>cpe:/o:juniper:junos:12.3x48:d20</vuln:product>
      <vuln:product>cpe:/o:juniper:junos:12.3x48:d25</vuln:product>
      <vuln:product>cpe:/o:juniper:junos:12.3x48:d30</vuln:product>
      <vuln:product>cpe:/o:juniper:junos:14.1</vuln:product>
      <vuln:product>cpe:/o:juniper:junos:14.1:r1</vuln:product>
      <vuln:product>cpe:/o:juniper:junos:14.1:r2</vuln:product>
      <vuln:product>cpe:/o:juniper:junos:14.1:r3</vuln:product>
      <vuln:product>cpe:/o:juniper:junos:14.1:r4</vuln:product>
      <vuln:product>cpe:/o:juniper:junos:14.1:r8</vuln:product>
      <vuln:product>cpe:/o:juniper:junos:14.1:r9</vuln:product>
      <vuln:product>cpe:/o:juniper:junos:14.1x53</vuln:product>
      <vuln:product>cpe:/o:juniper:junos:14.1x53:d10</vuln:product>
      <vuln:product>cpe:/o:juniper:junos:14.1x53:d15</vuln:product>
      <vuln:product>cpe:/o:juniper:junos:14.1x53:d16</vuln:product>
      <vuln:product>cpe:/o:juniper:junos:14.1x53:d25</vuln:product>
      <vuln:product>cpe:/o:juniper:junos:14.1x53:d26</vuln:product>
      <vuln:product>cpe:/o:juniper:junos:14.1x53:d27</vuln:product>
      <vuln:product>cpe:/o:juniper:junos:14.1x53:d35</vuln:product>
      <vuln:product>cpe:/o:juniper:junos:14.1x53:d50</vuln:product>
      <vuln:product>cpe:/o:juniper:junos:14.2:r1</vuln:product>
      <vuln:product>cpe:/o:juniper:junos:14.2:r2</vuln:product>
      <vuln:product>cpe:/o:juniper:junos:14.2:r3</vuln:product>
      <vuln:product>cpe:/o:juniper:junos:14.2:r4</vuln:product>
      <vuln:product>cpe:/o:juniper:junos:14.2:r5</vuln:product>
      <vuln:product>cpe:/o:juniper:junos:14.2:r7</vuln:product>
      <vuln:product>cpe:/o:juniper:junos:14.2:r8</vuln:product>
      <vuln:product>cpe:/o:juniper:junos:15.1:r1</vuln:product>
      <vuln:product>cpe:/o:juniper:junos:15.1:r2</vuln:product>
      <vuln:product>cpe:/o:juniper:junos:15.1x49:d10</vuln:product>
      <vuln:product>cpe:/o:juniper:junos:15.1x49:d20</vuln:product>
      <vuln:product>cpe:/o:juniper:junos:15.1x49:d30</vuln:product>
      <vuln:product>cpe:/o:juniper:junos:15.1x53:d20</vuln:product>
      <vuln:product>cpe:/o:juniper:junos:15.1x53:d21</vuln:product>
      <vuln:product>cpe:/o:juniper:junos:15.1x53:d25</vuln:product>
      <vuln:product>cpe:/o:juniper:junos:15.1x53:d30</vuln:product>
      <vuln:product>cpe:/o:juniper:junos:15.1x53:d32</vuln:product>
      <vuln:product>cpe:/o:juniper:junos:15.1x53:d33</vuln:product>
      <vuln:product>cpe:/o:juniper:junos:15.1x53:d34</vuln:product>
      <vuln:product>cpe:/o:juniper:junos:15.1x53:d60</vuln:product>
      <vuln:product>cpe:/o:juniper:junos:15.1x53:d61</vuln:product>
      <vuln:product>cpe:/o:juniper:junos:15.1x53:d62</vuln:product>
      <vuln:product>cpe:/o:juniper:junos:15.1x53:d63</vuln:product>
    </vuln:vulnerable-software-list>
    <vuln:cve-id>CVE-2018-0001</vuln:cve-id>
    <vuln:published-datetime>2018-01-10T17:29:00.930-05:00</vuln:published-datetime>
    <vuln:last-modified-datetime>2018-02-22T21:29:02.140-05:00</vuln:last-modified-datetime>
    <vuln:cvss>
      <cvss:base_metrics>
        <cvss:score>7.5</cvss:score>
        <cvss:access-vector>NETWORK</cvss:access-vector>
        <cvss:access-complexity>LOW</cvss:access-complexity>
        <cvss:authentication>NONE</cvss:authentication>
        <cvss:confidentiality-impact>PARTIAL</cvss:confidentiality-impact>
        <cvss:integrity-impact>PARTIAL</cvss:integrity-impact>
        <cvss:availability-impact>PARTIAL</cvss:availability-impact>
        <cvss:source>http://nvd.nist.gov</cvss:source>
        <cvss:generated-on-datetime>2018-01-30T17:21:59.327-05:00</cvss:generated-on-datetime>
      </cvss:base_metrics>
    </vuln:cvss>
    <vuln:cwe id="CWE-416"/>
    <vuln:references xml:lang="en" reference_type="UNKNOWN">
      <vuln:source>BID</vuln:source>
      <vuln:reference href="http://www.securityfocus.com/bid/103092" xml:lang="en">103092</vuln:reference>
    </vuln:references>
    <vuln:references xml:lang="en" reference_type="VENDOR_ADVISORY">
      <vuln:source>SECTRACK</vuln:source>
      <vuln:reference href="http://www.securitytracker.com/id/1040180" xml:lang="en">1040180</vuln:reference>
    </vuln:references>
    <vuln:references xml:lang="en" reference_type="VENDOR_ADVISORY">
      <vuln:source>CONFIRM</vuln:source>
      <vuln:reference href="https://kb.juniper.net/JSA10828" xml:lang="en">https://kb.juniper.net/JSA10828</vuln:reference>
    </vuln:references>
    <vuln:summary>A remote, unauthenticated attacker may be able to execute code by exploiting a use-after-free defect found in older versions of PHP through injection of crafted data via specific PHP URLs within the context of the J-Web process. Affected releases are Juniper Networks Junos OS: 12.1X46 versions prior to 12.1X46-D67; 12.3 versions prior to 12.3R12-S5; 12.3X48 versions prior to 12.3X48-D35; 14.1 versions prior to 14.1R8-S5, 14.1R9; 14.1X53 versions prior to 14.1X53-D44, 14.1X53-D50; 14.2 versions prior to 14.2R7-S7, 14.2R8; 15.1 versions prior to 15.1R3; 15.1X49 versions prior to 15.1X49-D30; 15.1X53 versions prior to 15.1X53-D70.</vuln:summary>
  </entry>
</nvd>

Python:

#Some sources I'm trying to follow
#https://www.youtube.com/watch?v=OdQ7xdXxeUA
#http://blog.appliedinformaticsinc.com/how-to-parse-and-convert-xml-to-csv-using-python/

#Step1: import lib
import csv
import xml.etree.cElementTree as ET

#Step 2: Parse xml document and get root
tree = ET.parse('nvdcve-2.0-2018.xml')
root = tree.getroot()

#Step 3: Create and open csv file
xml_data_to_csv = open('Out1.csv','w')

#Step 4: Create a list for the column headers
list_head=[]

#Step 5: Create variable to write to csv
Csv_writer=csv.writer(xml_data_to_csv)

#Step 6: Loop for each node
count=0
for element in root.findall('entry'):
    List_nodes=[]

    #Get head by tag
    if count == 0:
        av = element.findall('.//access-vector').tag
        list_head.append(av)

        count=+1

    #Write List_nodes to csv
    Csv_writer.writerow(List_nodes)

#Close csv file
xml_data_to_csv.close()

Tags: namerefhttplangproductgovnistfact
2条回答

你是对的,因为这是你的findall()命令。我相信您的问题是xml文档有许多名称空间前缀:vuln、patch、cpe、scap、cvss。你知道吗

xmlns:vuln="http://scap.nist.gov/schema/vulnerability/0.4"
xmlns:patch="http://scap.nist.gov/schema/patch/0.1" 
xmlns:cpe-lang="http://cpe.mitre.org/language/2.0"
xmlns:scap-core="http://scap.nist.gov/schema/scap-core/0.1" 
xmlns:cvss="http://scap.nist.gov/schema/cvss-v2/0.2"  

要使搜索表达式正常工作,需要判断是否在搜索中使用名称空间。This question深入细节。你想修改你的代码像这样。你知道吗

for element in root.findall('entry'):
    List_nodes=[]

    #Get head by tag
    if count == 0:
        namespaces = {'cvss':"http://scap.nist.gov/schema/cvss-v2/0.2"} 
        # add more as needed
        av = element.findall('.//cvss:access-vector',namespaces).tag
        list_head.append(av)

这确实是有点混乱,但有可能,下面的代码应该得到您需要的项目(csv相关的代码删除)。你知道吗

import xml.etree.ElementTree as ET
root = ET.parse('nvdcve-2.0-2018.xml').getroot()

cvss = {'cvss':'http://scap.nist.gov/schema/cvss-v2/0.2'}
namespace = {"namespace":"http://scap.nist.gov/schema/feed/vulnerability/2.0"}

for entry in root.findall('.//namespace:entry',namespace):
    entry_id = entry.get('id')
    print(entry_id)
    for access_vector in entry.findall('.//cvss:access-vector', cvss):
        value = access_vector.text
        print(value)

印刷品

CVE-2018-0001
NETWORK

相关问题 更多 >