Social
21.12.2021
1166

Установка, настройка и примеры работы с утилитой nmap

nmap — свободная утилита, предназначенная для разнообразного настраиваемого сканирования IP-сетей с любым количеством объектов, определения состояния объектов сканируемой сети. Изначально программа была реализована для систем UNIX, но сейчас доступны версии для множества операционных систем. 1. Установка 2. Команды Сканировать подсеть: Скан диапазона ip адресов 192.168.1.0-192.168.1.8: Сканирование адресов из файла, создадим файл target.txt (формат файла может […]

nmap — свободная утилита, предназначенная для разнообразного настраиваемого сканирования IP-сетей с любым количеством объектов, определения состояния объектов сканируемой сети. Изначально программа была реализована для систем UNIX, но сейчас доступны версии для множества операционных систем.

1. Установка

yum install nmap

2. Команды

Сканировать подсеть:

nmap 192.168.1.0/24
рис. 1

Скан диапазона ip адресов 192.168.1.0-192.168.1.8:

nmap 192.168.1.0-8
рис. 2

Сканирование адресов из файла, создадим файл target.txt (формат файла может быть любой с которым работает nmap), и запишем в него адреса каждый с новой строки:

touch target.txt
nano target.txt
рис. 3
sudo nmap -iL target.txt

Сканирование портов будем сканить 22 порт на всей подсети:

sudo nmap -p22 192.168.1.0/24
рис. 4

Есть 3 состояния портов:

  • open —  означает что порт открыт и принимает запросы;
  • closed — порт доступен, то есть он отвечает нашей утилите, но не используется ничем. Такие порты могут дать понять что по заданному адресу вообще есть работающая машина;
  • filtered — невозможно определить открыт ли порт, потому что фильтрация пакетов фильтрует все запросы nmap до этого порта. Делается это брандмауэром или, к примеру, настройками фаервола на роутере. На такие порты nmap шлет несколько запросов, чтобы убедится что дело именно в фильтрации, а не в неполадках в сети.

Немного теории: 

Как nmap понимает открыт порт или закрыт? Nmap использует уязвимость благодаря которой если порт открыт, то он ничего не возвращает. Если через какое то время nmap  ничего не получил он отмечает порт как открытый, а если порт закрыт то в nmap обратно возвращается пакет и nmap помечает порт как закрытый. Тут нужно уточнить, что открытый порт означает что через него есть возможность передавать данные и какая-то программа его слушает. Например, у меня почти везде светится порт 22 его слушает ssh. Если же порт закрытой, то это означает что не 1 программа его не слушает и отправить на него данные нет возможности.

Сканирование диапазона портов:

sudo nmap -p22-100 192.168.1.0/24
рис. 5

Сканирование нескольких портов:

sudo nmap -p22,80 192.168.1.0/24
рис. 6

3. Различные способы вывода

Перенаправить вывод можно штатными средствами linux:

sudo nmap -p80,53 192.168.1.0/24 > output.txt
рис. 7

Так же сам nmap поддерживает вывод в файл, самый распространенный это вывод в xml файл, т.к с ним удобно работать, для вывода в xml файл нужно вставить ключ -oX и название  файла

sudo nmap -p80,22 192.168.1.0/24 -oX output.xml

при таком выводе у вас информация появится как в консоле, так и в файле.

рис. 8
рис. 9

Вы можете открыть его, посмотреть структуру xml и данные в ней.

Далее напишем скрипт, который будет подтягивать только те ip адреса у которых были найдены открытые порты. Писать скрипт будем на python3 (проверьте чтобы он были у вас установлен).

Создадим файл sort.py

touch sort.py
рис. 10

Сканировать будем 22 порт по всей подсети, а вывод переведем в xml:

sudo nmap -p22 192.168.1.0/24 -oX output.xml

У нас создался файл output.xml. Откроем скрипт в любом удобном для вас редакторе, у меня это vim:

vim sort.py

и впишем туда следующий код:

import  xml.etree.ElementTree as et
 
def parser(xml_file):
    tree = et.parse(xml_file)
    root = tree.getroot()
    for child in root.findall("host"):
        for address in child.findall("address"):
            addr = address.attrib["addr"]
            for ports in child.findall("ports"):
                for port in ports.findall("port"):
                    for state  in port.findall("state"):
                        is_open = state.attrib["state"]
                        if is_open == "open":
                            with open("otarget.txt", "a") as ot:
                                ot.write(addr)

parser("output.xml")
рис. 11
import  xml.etree.ElementTree as et

— импортируем из библиотеки xml модуль Elementtree  как et.

def parser(xml_file):
    tree = et.parse(xml_file)
    root = tree.getroot()
    for child in root.findall("host"):
        for address in child.findall("address"):
            addr = address.attrib["addr"]
            for ports in child.findall("ports"):
                for port in ports.findall("port"):
                    for state  in port.findall("state"):
                        is_open = state.attrib["state"]
                        if is_open == "open":
                            with open("otarget.txt", "a") as ot:
                                ot.write(addr)

Создаем функцию parser и передаем туда наш файл. Дальше с помощью ElementTree открываем его, находим наш адрес и проверяем открыт ли у этого адреса порт. Если открыт, то мы сохраняем адрес в файл otarget.txt.

parser("output.xml")

Вызываем нашу функцию и передаем туда наш файл. Файл будет искаться в 1 директории со скриптом. Если ваш скрипт в другой директории, то нужно прописать тут полный путь до файла.

Посмотрим правильно ли отработал скрипт.

рис. 12

Вот все адреса, которые просканировал nmap, порт 22 открыт только на 192.168.1.8

рис. 13

вот что у нас в файле. Значит скрипт отработал правильно.

Давайте дополним наш скрипт, чтобы он полностью выполнял за нас эту работу, а мы вводили лишь порт который нужно просканировать и адрес.

Откроем наш файл sort.py и допишем там пару новых функций:

vim sort.py
	
	import os 

	def nmap():
		port = input("Input port: ")
		addr = input("Input address: ")
		os.system(f"sudo nmap -p{port} {addr} -oX output.xml")

Импортируем библиотеку os, для того чтобы мы могли выполнять команды bash. Дальше пишем функцию nmap в которой запрашиваем ввод порта и адреса, а дальше выполняем в bash команду nmap.

def main():
		nmap()
		parser("output.xml")

Тут мы создаем функцию main в которой будут по очереди вызываться функция nmap и parser.

Добавим условие для запуска функции main:

if __name__ == "__main__":
		main()
рис. 14

Запустим еще раз наш скрипт:

sudo python3 sort.py
рис. 15

Проверим, создались ли файл output.xml  и otarget.txt

ls
рис. 16

и посмотрим что записалось в otarget.txt

рис. 17

Вывод: Мы научились сканировать нашу сеть на наличие открытых портов и написали скрипт для автоматизации процесса сканирования.

Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии

Остались вопросы?

Я - Игорь Кондрашин, менеджер компании Voxlink. Хотите уточнить детали или готовы оставить заявку? Укажите номер телефона, я перезвоню в течение 3-х секунд.

VoIP оборудование


ближайшие курсы

10 доводов в пользу Asterisk

Распространяется бесплатно.

Asterisk – программное обеспечение с открытым исходным кодом, распространяется по лицензии GPL. Следовательно, установив один раз Asterisk вам не придется дополнительно платить за новых абонентов, подключение новых транков, расширение функционала и прочие лицензии. Это приближает стоимость владения станцией к нулю.

Безопасен в использовании.

Любое программное обеспечение может стать объектом интереса злоумышленников, в том числе телефонная станция. Однако, сам Asterisk, а также операционная система, на которой он работает, дают множество инструментов защиты от любых атак. При грамотной настройке безопасности у злоумышленников нет никаких шансов попасть на станцию.

Надежен в эксплуатации.

Время работы серверов некоторых наших клиентов исчисляется годами. Это значит, что Asterisk работает несколько лет, ему не требуются никакие перезагрузки или принудительные отключения. А еще это говорит о том, что в районе отличная ситуация с электроэнергией, но это уже не заслуга Asterisk.

Гибкий в настройке.

Зачастую возможности Asterisk ограничивает только фантазия пользователя. Ни один конструктор шаблонов не сравнится с Asterisk по гибкости настройки. Это позволяет решать с помощью Asterisk любые бизнес задачи, даже те, в которых выбор в его пользу не кажется изначально очевидным.

Имеет огромный функционал.

Во многом именно Asterisk показал какой должна быть современная телефонная станция. За многие годы развития функциональность Asterisk расширилась, а все основные возможности по-прежнему доступны бесплатно сразу после установки.

Интегрируется с любыми системами.

То, что Asterisk не умеет сам, он позволяет реализовать за счет интеграции. Это могут быть интеграции с коммерческими телефонными станциями, CRM, ERP системами, биллингом, сервисами колл-трекинга, колл-бэка и модулями статистики и аналитики.

Позволяет телефонизировать офис за считанные часы.

В нашей практике были проекты, реализованные за один рабочий день. Это значит, что утром к нам обращался клиент, а уже через несколько часов он пользовался новой IP-АТС. Безусловно, такая скорость редкость, ведь АТС – инструмент зарабатывания денег для многих компаний и спешка во внедрении не уместна. Но в случае острой необходимости Asterisk готов к быстрому старту.

Отличная масштабируемость.

Очень утомительно постоянно возвращаться к одному и тому же вопросу. Такое часто бывает в случае некачественного исполнения работ или выбора заведомо неподходящего бизнес-решения. С Asterisk точно не будет такой проблемы! Телефонная станция, построенная на Asterisk может быть масштабируема до немыслимых размеров. Главное – правильно подобрать оборудование.

Повышает управляемость бизнеса.

Asterisk дает не просто набор полезных функций, он повышает управляемость организации, качества и комфортности управления, а также увеличивает прозрачность бизнеса для руководства. Достичь этого можно, например, за счет автоматизации отчетов, подключения бота в Telegram, санкционированного доступа к станции из любой точки мира.

Снижает расходы на связь.

Связь между внутренними абонентами IP-АТС бесплатна всегда, независимо от их географического расположения. Также к Asterisk можно подключить любых операторов телефонии, в том числе GSM сим-карты и настроить маршрутизацию вызовов по наиболее выгодному тарифу. Всё это позволяет экономить с первых минут пользования станцией.