• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

Вопрос по Python. Как доступные wifi ТД вывести в терминал в виде списка ?

V

Valkiria

В программах (скриптах) для аудита wi-fi, таких как Airgeddon, Wi-Fi powner, wifite и аналогичных имеется один "фокус".
Я имею ввиду следующее:
  • в одном из начальных пунктов меню программа предлагает сделать выбор атакуемой точки доступа.
  • но этому выбору предшествует сканирование эфира и поис всех доступных точек доступа.
  • найденные при сканировании точки выводятся в консоли в виде списка и пользователю предоставляется выбор.

Вопрос: как на Python реализовать такое ?
Как доступные wifi точки доступа вывести в терминал в виде списка ?
 
Последнее редактирование модератором:

f22

Codeby Academy
Gold Team
05.05.2019
1 928
226
BIT
1 696
В программах (скриптах) для аудита wi-fi, таких как Airgeddon, Wi-Fi powner, wifite и аналогичных имеется один "фокус".
Я имею ввиду следующее:
  • в одном из начальных пунктов меню программа предлагает сделать выбор атакуемой точки доступа.
  • но этому выбору предшествует сканирование эфира и поис всех доступных точек доступа.
  • найденные при сканировании точки выводятся в консоли в виде списка и пользователю предоставляется выбор.

Вопрос: как на Python реализовать такое ?
Как доступные wifi точки доступа вывести в терминал в виде списка ?

На мой взгляд не стоит изобретать велосипед и воспользоваться
стандартными средствами Linux, а именно airodump-ng:

Python:
import os
import time

# Путь для сохранения логов
scan_log_file = "/tmp/airodump.log"
# Запускаем сканирование
os.system("airodump-ng wlan1 -w " + scan_log_file + " &")
# Засыпаем на 10 секунд
time.sleep(10)

# Получаем PID airodump, чтобы завершить его
get_pid_string = "ps aux | grep airodump | grep -v grep | tr -s " "  | cut -d " " -f 2"
airodump_pid = os.system(get_pid_string)

# завершаем
os.system("kill -9" + airodump_pid)

Учитывая, что airodump-ng по сути это надстройка,
думаю, что можно в бесконечном цикле использовать
Python:
import os
interface = "wlan0"
os.system(f"iwlist {interface} scanning | grep ESSID")

В этот момент нужно предложить пользователю нажать на сочетание Ctrl+C и предложить ему выбрать номер цели.
Дело в том, что работа iwlist заканчивается после того, как она один раз
просканировала эфир. Так что работать с её выходом достаточно просто,
это обычные текстовые данные.

Python:
import os
# # # # # # # # # # # # # # #
# Массив для списка интерфейсов
my_interfaces = []

# Получаем список доступных интерфейсов
system_interfaces = os.popen("ifconfig | grep \": \" | cut -d  \":\" -f 1").read()

# Добавляем их в массив
for line in system_interfaces.split("\n"):
    if line != "":
        my_interfaces.append(line)

# выбираем нужный интерфейс
print("С каким интерфейсом будем работать? \n")
counter = 1
for line in my_interfaces:
    print(f"{counter}. {line}")
    counter += 1
choice = input("Укажите номер интерфейса: ")

while int(choice) > len(my_interfaces) or int(choice) < 1:
    print("Ошибка!")
    print("Число должно быть в диапазоне от 1 до " + str(len(my_interfaces)))
    choice = input("Укажите номер интерфейса: ")
else:
    print(f"Работаем с интерфейсом {my_interfaces[int(choice) - 1]}")

interface = my_interfaces[int(choice) - 1]

# # # # # # # # # # # # # # #

# Заводим переменную для массива целей
my_targets = []

# Получаем список доступных сетей
raw_targets = os.popen(f"iwlist {interface} scanning | grep ESSID | tr -s \" \"").read()

# Добавляем Названия сетей в массив
for line in raw_targets.replace(" ESSID:","").split("\n"):

# Добавляем непустые строки выдачи 
    if line != "":
        my_targets.append(line.replace("\"",""))

# Показываем пользователю массив целей
print("Выбор цели:")
counter = 1
for line in my_targets:
    print(f"{counter}. {line}")
    counter += 1

# Предлагаем сделать выбор
input_target = input("Какую цель атакуем? \n")

# Проверяем выбор пользователя
while int(input_target) > len(my_targets) or int(input_target) < 1:
    print("Ошибка!")
    print("Число должно быть в диапазоне от 1 до " + str(len(my_targets)))
    input_target = input("Какую цель атакуем? \n")
else:
    print(f"Атакуем цель номер {input_target} {my_targets[int(input_target) - 1]}")

Можно пытаться несколько раз сканировать эфир, чтобы получить
более качественные результаты.
 
V

Valkiria

Ну, хорошо ))

А как этот список выводится в самой программа airodump-ng или wifi-autopowner ?
Допустим, я установил голый дебиан ?
И у меня установлены только iwconfig, ifconfig, iwlist и wpa-supplicant ?
Мне нужно получить список беспроводных сетей сетей, как это организовано в airgeddon ?

Сканирую эфир и получаю представление о доступных сетях следующим образом :
1. Сначала включаем интерфейс wlan1
# ip link set wlan1 up
или
# ifconfig wlan1 up
2. Далее сканируем
# iwlist wlan1 scan

Получаю список доступных ТД.
В этот момент нужно предложить пользователю нажать на сочетание Ctrl+C и предложить ему выбрать номер цели.

Ок, спасибо за ответ ))
Всё это мне нужно переварить .
Потом опять возникнут вопросы :)

А в линукс каким отладчиком лучше всего пользоваться новичку ?
 

f22

Codeby Academy
Gold Team
05.05.2019
1 928
226
BIT
1 696
Добавил выбор интерфейса.

Ок, спасибо за ответ ))
Всё это мне нужно переварить .
Потом опять возникнут вопросы :)

Не за что) Буду рад ответить.
Конечно, учти, что это индийской код, написанный, считай, на коленке ))
Его можно улучшать и улучшать )

Python:
import os

# Заводим переменные
global wifi_targets
global my_interfaces

# Добавляем непустые строки
def put_data_in_array(bash_output, target_array, delimiter):
    for line in bash_output.split(delimiter):
        if line != "":
            target_array.append(line.replace("\"",""))

# Метод выбора нужного пункта из массива
def make_choice(target_list, wifi_mode=0):
    counter = 1
    for line in target_list:
        if wifi_mode != 0:
            line = line.split("\n")[-2].replace("ESSID:","")
            print(f"{counter}. {line}")
        else:
            print(f"{counter}. {line}")
        counter += 1

    input_target = input("\nВыберите из списка \n")
    while int(input_target) > len(target_list) or int(input_target) < 1:
        print("\nОшибка!")
        print("Число должно быть в диапазоне от 1 до " + str(len(target_list)))
        input_target = input("\nВыберите из списка \n")
    else:
        print(f"\nВаш выбор: {target_list[int(input_target) - 1]}")
        input_target = target_list[int(input_target) - 1]

    return input_target


# Массив для списка интерфейсов
my_interfaces = []
# Получаем список доступных интерфейсов
system_interfaces = os.popen("ifconfig | grep \": \" | cut -d  \":\" -f 1").read()
# Добавляем их в массив
put_data_in_array(system_interfaces, my_interfaces, "\n")
# выбираем нужный интерфейс
print("Выберите интерфейс: ")
interface = make_choice(my_interfaces)

# Выбор режима выдачи списка целей
wifi_output_mode = input("В каком режиме отображать результаты сканирования?\n(1. Только названия сетей 2. Названия сетей, ESSID, дистанция)\n")

while int(wifi_output_mode) > 2 or int(wifi_output_mode) < 1:
    wifi_output_mode = input("В каком режиме отображать результаты сканирования?\n(1. Только названия сетей 2. Названия сетей, ESSID, дистанция)\n")

# Получение данных из эфира
raw_targets = os.popen(f"iwlist {interface} scanning  | grep ESSID -B5 | tr -d \" \"").read()

# Массив для списка целей
wifi_targets = []
# Получаем список доступных сетей
# Добавляем Названия сетей в массив
put_data_in_array(raw_targets, wifi_targets, "--")
# Предлагаем сделать выбор
print("Выберите цель: ")
if int(wifi_output_mode) == 1:
    input_target = make_choice(wifi_targets, 1)
else:
    input_target = make_choice(wifi_targets, 0)
 
Последнее редактирование:

InetTester

Green Team
21.10.2018
308
43
BIT
5
Если делать капитально то я бы посмотрел в сторону модуля scapy.

Ps: на github и gitlab довольно большое количество скриптов.
Wifi-scanner
 

RusRus

Member
08.12.2019
10
0
BIT
0
Всем привет, хочу сделать определение WiFi точек доступа и отправка этих данных по сети, т.е. охранную систему для ИБ . Можно ли использовать airodump-ng для отправки выводимых данных по LAN сети?

И GitHub - s3bap3/Wifi-scanner: Python script to scan available wireless networks, and display MAC address and security settings по этому проекту не понял что писать в параметры, как прописывать свою wifi карту ?
 

Вложения

  • Снимок экрана от 2022-07-08 11-07-55.png
    Снимок экрана от 2022-07-08 11-07-55.png
    16,7 КБ · Просмотры: 117
Последнее редактирование:

OxFF3

Green Team
21.04.2019
81
9
BIT
2
Всем привет, хочу сделать определение WiFi точек доступа и отправка этих данных по сети, т.е. охранную систему для ИБ . Можно ли использовать airodump-ng для отправки выводимых данных по LAN сети?

И GitHub - s3bap3/Wifi-scanner: Python script to scan available wireless networks, and display MAC address and security settings по этому проекту не понял что писать в параметры, как прописывать свою wifi карту ?
А что тут непонятного) Он же тебе написал, что нужно указывать ключ "-i", а после него указать имя сетевого интерфейса твоего wifi адптера
Вроде все очевидно)
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!