@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, но я не знаю, как их тут использовать, чтобы добиться нужной цели.
  • Вопрос задан
  • 862 просмотра
Решения вопроса 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
Здравствуйте. Есть ли возможность с Вами связаться? По поводу предыдущего вопроса по курсу Нетологии хотел бы узнать
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
SpectrumData Екатеринбург
от 150 000 до 250 000 ₽
Гринатом Москва
от 150 000 ₽
DIGITAL SECTOR Краснодар
от 150 000 до 250 000 ₽
27 июн. 2024, в 10:44
10000 руб./за проект
27 июн. 2024, в 10:29
18000 руб./за проект