@ARHPOMOR

Python nmap module проблема со скриптом, не могу вывести нужные параметры, как решить?

Нужно написать скрипт на пайтоне с модулем нмап и просканировать ВМ. Нужно, чтобы скрипт выводил в столбик порт, службу и ее версию. Пример верного аутпута: 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, но я не знаю, как их тут использовать, чтобы добиться нужной цели.
  • Вопрос задан
  • 956 просмотров
Решения вопроса 1
SoreMix
@SoreMix Куратор тега Python
yellow
вроде параметр name есть

А если не угадывать, а проверить?

Вообще, вы выводите i["service"], и вот вывод у него следующий:
{'name': 'telnet', 'product': 'Linux telnetd', 'ostype': 'Linux', 'method': 'probed', 'conf': '10'}


Ключ name лежит не в словаре i, а в i['service']. Так что правильно будет i['service']['name']
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@JohnDoe88
Здравствуйте. Есть ли возможность с Вами связаться? По поводу предыдущего вопроса по курсу Нетологии хотел бы узнать
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы