#python #python-3.6 #nmap
Вопрос:
Я все еще довольно свежо отношусь к Python. Я упаковал два сканирования Nmap в XML каждый и хотел бы сравнить их. Речь идет о том, какие Mac — адреса НЕ отображаются в обоих сканированиях.
Но теперь у меня уже есть проблема при чтении первого, что он выдает мне ошибку: 02:10:18:09:E0:DC 7C:8B:CA:17:6D:28 Traceback (most recent call last): File "/home/naseweis/Documents/Nmap/compare.py", line 17, in <module> mac=adress[1].attributes["addr"] IndexError: list index out of range
t правильно указывает мне первые два Mac — адреса. Поскольку Nmap сохраняет свой собственный адрес без Mac-адреса (т. Е. только IP). Если строка soert отсутствует и появляется указанное сообщение об ошибке, я знаю, почему возникает ошибка, но, к сожалению, я не знаю, как ее решить в коде. Будет здорово, если ты мне поможешь. Я думаю, проблема в том, что я рассматриваю все это статически здесь mac = address [1] .attributes ["addr"]
. К сожалению, я не знаю, как решить эту проблему красиво.
# Compare 2 Scans
from xml.dom import minidom
xmldoc1=minidom.parse("file.xml")
hosts=xmldoc1.getElementsByTagName('host')
for host in hosts:
adress=host.getElementsByTagName("address")
if adress:
mac=adress[1].attributes["addr"]
MAC=mac.value
print("%s"%(MAC))
`
file.xml
[code]?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE nmaprun>
<?xml-stylesheet href="file:///usr/bin/../share/nmap/nmap.xsl" type="text/xsl"?>
<!-- Nmap 7.91 scan initiated Fri Sep 24 17:22:47 2021 as: nmap -sn -oX ./Documents/Nmap/file.xml 192.168.0.0/24 -->
<nmaprun scanner="nmap" args="nmap -sn -oX ./Documents/Nmap/file.xml 192.168.0.0/24" start="1632500567" startstr="Fri Sep 24 17:22:47 2021" version="7.91" xmloutputversion="1.05">
<verbose level="0"/>
<debugging level="0"/>
<host><status state="up" reason="arp-response" reason_ttl="0"/>
<address addr="192.168.0.1" addrtype="ipv4"/>
<address addr="02:10:18:09:E0:DC" addrtype="mac"/>
<hostnames>
<hostname name="kabelbox" type="PTR"/>
</hostnames>
<times srtt="10411" rttvar="8438" to="100000"/>
</host>
<host><status state="up" reason="arp-response" reason_ttl="0"/>
<address addr="192.168.0.28" addrtype="ipv4"/>
<address addr="7C:8B:CA:17:6D:28" addrtype="mac" vendor="Tp-link Technologies"/>
<hostnames>
<hostname name="DESKTOP-2A5NKMC" type="PTR"/>
</hostnames>
<times srtt="256230" rttvar="256230" to="1281150"/>
</host>
<host><status state="up" reason="arp-response" reason_ttl="0"/>
<address addr="192.168.0.90" addrtype="ipv4"/>
<address addr="7C:0B:C6:40:B2:B0" addrtype="mac" vendor="Samsung Electronics"/>
<hostnames>
<hostname name="android-e857b307fef24a39" type="PTR"/>
</hostnames>
<times srtt="184769" rttvar="161219" to="829645"/>
</host>
<runstats><finished time="1632500571" timestr="Fri Sep 24 17:22:51 2021" summary="Nmap done at Fri Sep 24 17:22:51 2021; 256 IP addresses (4 hosts up) scanned in 4.39 seconds" elapsed="4.39" exit="success"/><hosts up="4" down="252" total="256"/>
</runstats>
</nmaprun>
Спасибо за помощь
Комментарии:
1. вы должны проверить
if len(adress) > 1:
илиif len(adress) >= 2:
перед использованиемadress[1]
Ответ №1:
Вы ожидаете 2 адреса в хосте — поэтому вам следует проверить len()
if len(adress) > 1: # if len(adress) >= 2:
mac = adress[1].attributes["addr"]
# ... rest ...
else:
print('There is no MAC address')
Комментарии:
1. Вот это сработало для меня