123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 |
- #!/usr/bin/python3
- import os
- import subprocess
- import shutil
- import optparse
- #функция принимает из консоли аргументы
- def get_argument():
- argument = optparse.OptionParser()
- argument.add_option('-p', '--path', dest='path', help='Путь до файла с результатом сканирования Router Scann')
- argument.add_option('-i', '--interface', dest='interface', help='Имя безпроводного интерфейса')
- argument.add_option('-m', '--mac', dest='mac', help='Сопоставить один mac-address и результат сканирования Router Scann')
- argument.add_option('-M', '--mac-list', dest='mac_list', help='Путь до файла с mac-адресами')
- #костыль!!!
- argument.add_option('-r', '--resalt-RS', dest='resalt_router_scann', action='store_const', const='all', help='Покажет результат работы Router Scann')
-
- #присваениие переменным значений флага и аргумента
- (options, arguments) = argument.parse_args()
-
- #проверка на ввод аргументов
- #ключи -p и обязателен
- if not options.path:
- argument.error('[!] Укажите путь до файла с результатами сканирования Router Scann, (этот параметр является обязательным')
- elif not options.path.endswith('.csv'):
- argument.error('[!] Формат файла должен быть .csv, который получен в результате работы Router Scann')
-
- elif options.resalt_router_scann:
- #чтение всего результата работы Router Scann
- with open(options.path, 'r') as resalt_rs:
- for line in resalt_rs:
- resalt = line.split(';')
- print('\n##########################################')
- print('Данные по маршрутизатору:' +
- '\nVendor: ' + resalt[5].replace('"', '') +
- '\nIP: ' + resalt[0].replace('"', '') +
- '\nPort: ' + resalt[1].replace('"', '') +
- '\nLan IP: ' + resalt[13].replace('"', '') +
- '\nAuthorization: ' + resalt[4].replace('"', '') +
- '\n\nДанные по безпроводному подключению:' +
- '\nBSSID: ' + resalt[8].replace('"', '') +
- '\nESSID: ' + resalt[9].replace('"', '') +
- '\nKey: ' + resalt[11].replace('"', ''))
- print('##########################################')
-
- elif options.interface:
- #функция, принимает на фход интерфейс, запускает мониторинг
- #и возвращает список мак-адресов полученных в результате мониторинга
- mac_list_resalt_monitor = airodump_mon(options.interface)
- #функция принимает на вход путь до результата сканирования Router Scann
- #и результат мониторинга, или список мак-адресов, или мак-адрес
- search_matches(options.path, mac_list_resalt_monitor)
-
- elif options.mac:
- options.mac = str(options.mac.upper())
- #функция которая сравнивает один мак адрес
- search_matches(options.path, options.mac)
-
- elif options.mac_list:
- with open(options.mac_list) as mac_list:
- options.mac_list = []
- for mac_line in mac_list:
- mac_line = mac_line.strip()
- options.mac_list.append(mac_line.upper())
-
- #функция которая сравнивает список мак адресов
- search_matches(options.path, options.mac_list)
-
- return options
-
- def search_matches(path_resalt_router_scann, mac):
- #читаем результат сканирования Router Scan
- with open(path_resalt_router_scann, 'r') as resalt:
- for mac_line_scann in resalt:
- res = mac_line_scann.split(';')
- resalt_reading_router_scann = res[8].replace('"', '')
- #читаем результат airodump-ng/списка мак-адресов/мак-адрес
- if type(mac) == list:
- for resalt_mac_list in mac:
- if resalt_reading_router_scann == resalt_mac_list:
- print('\n[+] Есть пробитие')
- print('ip: ' + res[0] + '\nauth: ' + res[4] + '\nESSID: ' + res[9] + '\nBSSID: ' + res[8] + '\nkey: ' + res[11])
-
- elif type(mac) == str:
- if mac == resalt_reading_router_scann:
- print('\n[+] Есть пробитие')
- print('ip: ' + res[0] + '\nauth: ' + res[4] + '\nESSID: ' + res[9] + '\nBSSID: ' + res[8] + '\nkey: ' + res[11])
- print('\n[!] Завершение работы! Если нет результатов, то совпадений не найдено')
- def airodump_mon(interface):
- if not os.path.exists('log'):
- os.mkdir('log')
- #перевод карточки в режим монитора
- os.system('airmon-ng start ' + interface)
- #запуск мониторинга, и сохранение результата во временный файл
- interface = interface + 'mon'
- os.system('airodump-ng ' + interface + ' -w log/resalt')
-
- #чтение результата мониторинга и добавление в список
- with open('log/resalt-01.csv', 'r') as resalt:
- mac_list_resalt_monitor = []
- for line in resalt:
- res_line = line.split(' ')
- mac_list_resalt_monitor.append(res_line[0].replace(',', ''))
-
- #после завершения работы скрипта удаляется каталог log
- #и карта переводится в рабочий режим
- os.system('airmon-ng stop ' + interface)
- shutil.rmtree('log')
- return mac_list_resalt_monitor
- get_argument()
|