wifi_search_0.2.py 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. #!/usr/bin/python3
  2. import os
  3. import subprocess
  4. import shutil
  5. import optparse
  6. #функция принимает из консоли аргументы
  7. def get_argument():
  8. argument = optparse.OptionParser()
  9. argument.add_option('-p', '--path', dest='path', help='Путь до файла с результатом сканирования Router Scann')
  10. argument.add_option('-i', '--interface', dest='interface', help='Имя безпроводного интерфейса')
  11. argument.add_option('-m', '--mac', dest='mac', help='Сопоставить один mac-address и результат сканирования Router Scann')
  12. argument.add_option('-M', '--mac-list', dest='mac_list', help='Путь до файла с mac-адресами')
  13. #костыль!!!
  14. argument.add_option('-r', '--resalt-RS', dest='resalt_router_scann', action='store_const', const='all', help='Покажет результат работы Router Scann')
  15. #присваениие переменным значений флага и аргумента
  16. (options, arguments) = argument.parse_args()
  17. #проверка на ввод аргументов
  18. #ключи -p и обязателен
  19. if not options.path:
  20. argument.error('[!] Укажите путь до файла с результатами сканирования Router Scann, (этот параметр является обязательным')
  21. elif not options.path.endswith('.csv'):
  22. argument.error('[!] Формат файла должен быть .csv, который получен в результате работы Router Scann')
  23. elif options.resalt_router_scann:
  24. #чтение всего результата работы Router Scann
  25. with open(options.path, 'r') as resalt_rs:
  26. for line in resalt_rs:
  27. resalt = line.split(';')
  28. print('\n##########################################')
  29. print('Данные по маршрутизатору:' +
  30. '\nVendor: ' + resalt[5].replace('"', '') +
  31. '\nIP: ' + resalt[0].replace('"', '') +
  32. '\nPort: ' + resalt[1].replace('"', '') +
  33. '\nLan IP: ' + resalt[13].replace('"', '') +
  34. '\nAuthorization: ' + resalt[4].replace('"', '') +
  35. '\n\nДанные по безпроводному подключению:' +
  36. '\nBSSID: ' + resalt[8].replace('"', '') +
  37. '\nESSID: ' + resalt[9].replace('"', '') +
  38. '\nKey: ' + resalt[11].replace('"', ''))
  39. print('##########################################')
  40. elif options.interface:
  41. #функция, принимает на фход интерфейс, запускает мониторинг
  42. #и возвращает список мак-адресов полученных в результате мониторинга
  43. mac_list_resalt_monitor = airodump_mon(options.interface)
  44. #функция принимает на вход путь до результата сканирования Router Scann
  45. #и результат мониторинга, или список мак-адресов, или мак-адрес
  46. search_matches(options.path, mac_list_resalt_monitor)
  47. elif options.mac:
  48. options.mac = str(options.mac.upper())
  49. #функция которая сравнивает один мак адрес
  50. search_matches(options.path, options.mac)
  51. elif options.mac_list:
  52. with open(options.mac_list) as mac_list:
  53. options.mac_list = []
  54. for mac_line in mac_list:
  55. mac_line = mac_line.strip()
  56. options.mac_list.append(mac_line.upper())
  57. #функция которая сравнивает список мак адресов
  58. search_matches(options.path, options.mac_list)
  59. return options
  60. def search_matches(path_resalt_router_scann, mac):
  61. #читаем результат сканирования Router Scan
  62. with open(path_resalt_router_scann, 'r') as resalt:
  63. for mac_line_scann in resalt:
  64. res = mac_line_scann.split(';')
  65. resalt_reading_router_scann = res[8].replace('"', '')
  66. #читаем результат airodump-ng/списка мак-адресов/мак-адрес
  67. if type(mac) == list:
  68. for resalt_mac_list in mac:
  69. if resalt_reading_router_scann == resalt_mac_list:
  70. print('\n[+] Есть пробитие')
  71. print('ip: ' + res[0] + '\nauth: ' + res[4] + '\nESSID: ' + res[9] + '\nBSSID: ' + res[8] + '\nkey: ' + res[11])
  72. elif type(mac) == str:
  73. if mac == resalt_reading_router_scann:
  74. print('\n[+] Есть пробитие')
  75. print('ip: ' + res[0] + '\nauth: ' + res[4] + '\nESSID: ' + res[9] + '\nBSSID: ' + res[8] + '\nkey: ' + res[11])
  76. print('\n[!] Завершение работы! Если нет результатов, то совпадений не найдено')
  77. def airodump_mon(interface):
  78. if not os.path.exists('log'):
  79. os.mkdir('log')
  80. #перевод карточки в режим монитора
  81. os.system('airmon-ng start ' + interface)
  82. #запуск мониторинга, и сохранение результата во временный файл
  83. interface = interface + 'mon'
  84. os.system('airodump-ng ' + interface + ' -w log/resalt')
  85. #чтение результата мониторинга и добавление в список
  86. with open('log/resalt-01.csv', 'r') as resalt:
  87. mac_list_resalt_monitor = []
  88. for line in resalt:
  89. res_line = line.split(' ')
  90. mac_list_resalt_monitor.append(res_line[0].replace(',', ''))
  91. #после завершения работы скрипта удаляется каталог log
  92. #и карта переводится в рабочий режим
  93. os.system('airmon-ng stop ' + interface)
  94. shutil.rmtree('log')
  95. return mac_list_resalt_monitor
  96. get_argument()