Пишем MAC CHANGER на PYTHON

Пишем MAC CHANGER на PYTHON

moderator E7

Всем привет ! В данной статье мы вспомним что такое мак адресс , для чего он нужен и как нам его поменять. Для иземенения своего мак адреса мы напишем свой mac changer .


Что такое MAC ?Все выше выполненые действия в терминале, я перенес в программу на

МАС адрес (media access control address) – уникальный идентификатор, назначенный сетевому адаптеру, применяется в сетях стандартов IEEE 802, в основном Ethernet, Wi-Fi и Bluetooth.

Официально он называется «идентификатором типа EUI-48». Из названия очевидно, что адрес имеет длину в 48 бит, т.е. 6 байт. Общепринятого стандарта на написание адреса нет (в противоположность IPv4 адресу, где октеты всегда разделяют точками).Обычно он записывается как шесть шестнадцатеричных чисел, разделенных двоеточием: 00:AB:CD:EF:11:22 , хотя некоторые производители оборудования предпочитают запись вида 00-AB-CD-EF-11-22 и даже 00ab.cdef.1122.


Структура адреса

Адрес состоит из части идентификатора производителя, OUI, и идентификатора, присваиваемого производителем. Назначением идентификаторов OUI (Organizationally Unique Identifier) занимается организация IEEE. На самом деле его длина может быть не только 3 байта (24 бита), а 28 или 36 бит, из которых формируются блоки (MAC Address Block, МА) адресов типов Large (MA-L), Medium (MA-M) и Small (MA-S) соответственно. Размер выдаваемого блока, в таком случае, составит 24, 20, 12 бит или 16 млн, 1 млн, 4 тыс. штук адресов. В настоящий момент распределено порядка 38 тысяч блоков, их можно посмотреть многочисленными онлайн-инструментами, например у IEEE или Wireshark.


MAC CHANGER

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

Первое что мы сделаем , это посмотрим MAC адрес нашего сетевого адаптера и не только:

ifconfig

Мы можем заметить строку ether , вот она и указывает на наш адрес устройства


Второе , переходим к ручной смене MAC адреса. И начнем с того , что "положим" сетевой интерфейс eth0 (которые является основным среди всех интерфейсов выходящих в интернет).

P.S. И всё же , не всегда он может иметь такое имя (eth0) , он может у вас называться и (enp1s0f0) , но факт того, что это тот самый, основной интерфейс, который нам нужен , остаеться неизменным.


ifconfig eth0 down

А теперь пройдёмся поэтапно , что же мы сделали ? Во первых , мы положили сетевой интерфейс вот этой командой:

ifconfig eth0 down

Вторым действие мы меняем MAC адрес данного интерфейса.

ifconfig eth0 hw 00:11:22:33:44:55

Отлично , теперь мы поднимаем на интерфейс и вот , у нас уже другой MAC адресс !


MAC CHANGER на PYTHON

Переходим к самой программе. Для её написание нам потребуеться модуль subprocess.


Модуль subprocess отвечает за выполнение следующих действий: порождение новых процессов, соединение c потоками стандартного ввода, стандартного вывода, стандартного вывода сообщений об ошибках и получение кодов возврата от этих процессов.

В нашем случае , мы будем использовать этот модуль для выполнения системных команд с помощью языка Python


Все выше выполненые действия в терминале, я перенес в программу на Python

Основную функцию которую мы будем использовать это


subprocess.call("COMAND", shell=true)

и её вариация:


subprocess.call(["COMAND", "OPTION"])

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

Сейчас объяcню по подробнее , почему мы так поступим на примере.

Допустим мы выложили данный код на открытый репозиторий гита , и какой нибудь пользователь его склонировал себе на рабочую машину. Решил он проверить код на ошибки с валидацией. Он берёт , и вписывает в поле ввода интерфейса (или MAC адреса) следующее:


Interface> eth0; shutdown
MacAddr> 00:11:22:33:44:55

Бац , и у нас выключается тачка). Всё потому что функцию call мы прописаль как в первом варианте , то есть так:


subprocess.call("COMAND")

В этом случае в аргумент передается строка с командой и её опциями , причём , где опции, а где сама команда это строка не определяет , поэтому она выполняет всё что в неё передали.


Вторая вариация call лучше первой , тем что первым аргументом , в передаваемом списке, является команда , а остальные элементы списка , это её опции и параметры.


subprocess.call(["ls", "-l"])
  1. "ls" , это команда
  2. "-l" это её опция

Встроенный модуль optparse отвечает за парсинг параметров такого типа:


python3 main.py -i eth0 -m 00:11:22:33:44:55

Для того чтобы изпользовать этот модуль надо его импортировать(3 строка) , создать экземпляр класса(5 строка), добавляем флаги (6,9 строка), сам процесс парсинга данных из флагов(11; 16,17 строка).


Пожалуй на этом всё мы написали свой MAC CHANGER, однако эта программа не совершенна , поэтому вы можете изменять её на своё усмотрение ;)


С любовью от E7





Report Page