MAC-адрес (Media Access Control address) — это уникальный идентификатор, назначаемый каждому сетевому интерфейсу в устройстве, подключенном к сети. Сегодня покажу, как использовать Python для изменения MAC-адреса на Linux.
Eще по теме: Брут FTP с помощью ftplib на Python
Смена MAC-адреса Linux на Python
Нам не нужно ничего устанавливать, так как мы будем использовать модуль subprocess в Python для взаимодействия с командой ifconfig в Linux. Модуль subprocess в Python позволяет запускать дочерние процессы и взаимодействовать с ними.
Subprocess отвечает за порождение новых процессов, соединение с потоками стандартного ввода, стандартного вывода, стандартного вывода сообщений об ошибках и получение кодов возврата от данных процессов.
Создайте новый файл Python и импортируйте следующие библиотеки:
1 |
import subprocess, string, random, re |
Можно выбрать случайный новый MAC-адрес или изменить на указанный. Следовательно, создадим функцию для генерации и возврата MAC-адреса:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
def get_random_mac_address(): """Генерирует и возвращает MAC-адрес в формате Linux""" # Получаем верхний регистр шестнадцатеричных цифр uppercased_hexdigits = ''.join(set(string.hexdigits.upper())) mac = "" for i in range(6): for j in range(2): if i == 0: mac += random.choice("02468ACE") else: mac += random.choice(uppercased_hexdigits) mac += ":" return mac.strip(":") |
Мы используем модуль string, чтобы получить шестнадцатеричные цифры, используемые в MAC-адресах. Мы удаляем символы в нижнем регистре и используем модуль random для выбора из этих цифр.
Далее давайте создадим еще одну функцию, которая использует команду ifconfig для получения текущего MAC-адреса нашей машины с Linux:
1 2 3 |
def get_current_mac_address(iface): output = subprocess.check_output(f"ifconfig {iface}", shell=True).decode() return re.search("ether (.+)", output).group().split()[1].strip() |
Мы используем функцию check_output() из модуля subprocess, которая выполняет команду в оболочке по умолчанию и возвращает вывод команды.
MAC-адрес находится сразу после слова ether, и мы используем метод re.search() для его извлечения.
Теперь, когда у нас есть наши утилиты, давайте создадим основную функцию для изменения MAC-адреса:
1 2 3 4 |
def change_mac_address(iface, new_mac_address): subprocess.check_output(f"ifconfig {iface} down", shell=True) subprocess.check_output(f"ifconfig {iface} hw ether {new_mac_address}", shell=True) subprocess.check_output(f"ifconfig {iface} up", shell=True) |
Функция change_mac_address() принимает интерфейс и новый MAC-адрес в качестве параметров, отключает интерфейс, изменяет MAC-адрес и снова включает его.
Теперь, когда у нас есть все необходимое, используем модуль argparse, чтобы завершить наш скрипт:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
if __name__ == "__main__": import argparse parser = argparse.ArgumentParser(description="Python Mac Changer on Linux") parser.add_argument("interface", help="Имя сетевого интерфейса в Linux") parser.add_argument("-r", "--random", action="store_true", help="Сгенерировать случайный MAC-адрес") parser.add_argument("-m", "--mac", help="Новый MAC-адрес, который вы хотите установить") args = parser.parse_args() iface = args.interface if args.random: new_mac_address = get_random_mac_address() elif args.mac: new_mac_address = args.mac old_mac_address = get_current_mac_address(iface) print("[*] Текущий MAC-адрес:", old_mac_address) change_mac_address(iface, new_mac_address) new_mac_address = get_current_mac_address(iface) print("[+] Новый MAC-адрес:", new_mac_address) |
У нас есть три параметра для передачи в скрипт:
- Имя сетевого интерфейса, MAC-адрес которого нужно изменить.
- Параметр -r для генерации случайного MAC-адреса вместо указанного.
- Новый MAC-адрес, который хотите использовать.
В основной части кода мы используем функцию get_current_mac_address() для получения старого MAC-адреса, меняем MAC-адрес, а затем снова запускаем get_current_mac_address() для проверки.
Теперь можно запустить скрипт:
1 |
$ python mac_address_changer_linux.py wlan0 -r |
В этом примере я изменяю MAC-адрес интерфейса wlan0 на случайно сгенерированный:
Также можно изменить MAC-адрес на определенный:
1 2 |
$ python mac_address_changer_linux.py wlan0 -m 00:FA:CE:DE:AD:00 |
Изменения будут отражены на этой машине и на других машинах в той же локальной сети и в маршрутизаторе.
Таким образом можно легко создать собственный инструмент для изменения MAC-адреса на Windows. Это может быть полезно для различных целей, включая обход блокировок по MAC-адресу и обеспечение дополнительной анонимности при подключении к сети.
ПОЛЕЗНЫЕ ССЫЛКИ:
- Создание трояна на Python
- Создание шифровальщика на Python
- Поиск открытых FTP с помощью ftplib на Python