Нужно написать скрипт на пайтоне с модулем нмап и просканировать ВМ. Нужно, чтобы скрипт выводил в столбик порт, службу и ее версию. Пример верного аутпута:
21 ftp 2.0
. И так идут в столбик.
Мой скрипт следующий:
import nmap3
nmap = nmap3.Nmap()
result = nmap.nmap_version_detection("10.0.0.3")
for i in result["10.0.0.3"]["ports"]:
print(i["portid"], i["service"])
Он выводит вот это:
21 {'name': 'ftp', 'product': 'vsftpd', 'version': '2.3.4', 'ostype': 'Unix', 'method': 'probed', 'conf': '10'}
22 {'name': 'ssh', 'product': 'OpenSSH', 'version': '4.7p1 Debian 8ubuntu1', 'extrainfo': 'protocol 2.0', 'ostype': 'Linux', 'method': 'probed', 'conf': '10'}
23 {'name': 'telnet', 'product': 'Linux telnetd', 'ostype': 'Linux', 'method': 'probed', 'conf': '10'}
25 {'name': 'smtp', 'product': 'Postfix smtpd', 'hostname': ' metasploitable.localdomain', 'method': 'probed', 'conf': '10'}
и т.д.
Мне нужно, чтобы он вывел следующие параметры:
print(i["portid"], i["name"], i["version"])
Однако при этом принте он выводит такую ошибку:
Traceback (most recent call last):
File "/home/PycharmProjects/nets/./net.py", line 7, in <module>
print(i["portid"], i["name"], i["version"])
KeyError: 'name'
Я не понимаю, в чем проблема, ведь вроде параметр name есть у каждой службы, а вот version не у каждой.
Можно ли сделать, чтобы скрипт проверял, есть ли name и version у службы, а если нет, то продолжал выполнение и записывал в аутпут просто пустое значение?
Мне сказали, что нужно использовать try и except, но я не знаю, как их тут использовать, чтобы добиться нужной цели.