Используя вывод XML из nmap для доступных виртуальных машин, работающих на хост-компьютере, полученный с помощью nmap -oX output.xml -sP 192.168.2.*
, я хотел бы получить IP-адрес каждой машины, поставщик которой соответствует QEMU Virtual NIC
. Я решил использовать Python ElementTree XML API для этого, но у меня возникли проблемы с изоляцией элементов host с указанными элементами address.
Вот фрагмент вывода XML, который нужно использовать:
<host><status state="up" reason="arp-response"/>
<address addr="192.168.2.93" addrtype="ipv4"/>
<address addr="52:54:00:E2:17:31" addrtype="mac" vendor="QEMU Virtual NIC"/>
<hostnames>
</hostnames>
<times srtt="1023" rttvar="5000" to="100000"/>
</host>
<host><status state="up" reason="arp-response"/>
<address addr="192.168.2.96" addrtype="ipv4"/>
<address addr="52:54:00:45:86:8A" addrtype="mac" vendor="QEMU Virtual NIC"/>
<hostnames>
</hostnames>
<times srtt="155" rttvar="5000" to="100000"/>
</host>
<host><status state="up" reason="arp-response"/>
<address addr="192.168.2.103" addrtype="ipv4"/>
<address addr="52:54:00:61:7A:E5" addrtype="mac" vendor="QEMU Virtual NIC"/>
<hostnames>
</hostnames>
<times srtt="391" rttvar="5000" to="100000"/>
</host>
Используя findall
и приведенный ниже синтаксис XPath, я смог найти элементы address с атрибутом требуемого поставщика:
import xml.etree.ElementTree as ET
tree = ET.parse('output.xml')
tree.findall("./host/address/[@vendor='QEMU Virtual NIC']")
Но что мне действительно нужно, так это элементы host, которым принадлежат найденные выше элементы address, чтобы затем я мог найти другие подэлементы address введите «ipv4» для того же хоста, чтобы наконец получить IP-адрес хоста. Может ли кто-нибудь указать мне правильное направление для достижения этого с помощью XPath и ElementTree?