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

macchanger своими руками и ошибки регулярки

addedie

Well-known member
04.08.2019
157
0
BIT
1
вот такую ошибку получаю
Bash:
(base) admix@buben:~/PycharmProjects/untitled$ python ./pytest.py -i wlan0 -m 00:11:22:33:44:55
Traceback (most recent call last):
  File "./pytest.py", line 29, in <module>
    mac_address_search_result = re.search(r"\w\w:\w\w:\w\w:\w\w:\w\w:\w\w", ifconfig_result)
  File "/home/admix/anaconda3/lib/python3.7/re.py", line 183, in search
    return _compile(pattern, flags).search(string)
TypeError: cannot use a string pattern on a bytes-like object
(base) admix@buben:~/PycharmProjects/untitled$
на запрос в питоне вот этот
Python:
ifconfig_result = subprocess.check_output(["ifconfig", options.interface])

mac_address_search_result = re.search(r"\w\w:\w\w:\w\w:\w\w:\w\w:\w\w", ifconfig_result)
print(mac_address_search_result.group(0))
 
Последнее редактирование:
что надо поменять в коде чтобы он работал на 3м питоне, вот код и ошибка

Python:
#!/usr/bin/env python

import subprocess
import optparse
import re


def get_arguments():
    parser = optparse.OptionParser()
    parser.add_option("-i", "--interface", dest="interface", help="Interface to change its MAC address")
    parser.add_option("-m", "--mac", dest="new_mac", help="New MAC address")
    (options, arguments) = parser.parse_args()
    if not options.interface:
        parser.error("[-] Please specify an interface, use --help for more info.")
    elif not options.new_mac:
        parser.error("[-] Please specify a new mac, use --help for more info.")
    return options


def change_mac(interface, new_mac):
    print("[+] Changing MAC address for " + interface + " to " + new_mac)
    subprocess.call("ifconfig", interface, "down")
    subprocess.call("ifconfig", interface, "hw", "ether", new_mac)
    subprocess.call("ifconfig", interface, "up")


options = get_arguments()
# change_mac(options.interface, options.new_mac)

ifconfig_result = subprocess.check_output(["ifconfig", options.interface])

mac_address_search_result = re.search(r"\w\w:\w\w:\w\w:\w\w:\w\w:\w\w", ifconfig_result)
if mac_address_search_result:
    print(mac_address_search_result.group(0))
else:
    print("[-] Could not read MAC address")
ошибка
Bash:
(base) admix@buben:~/PycharmProjects/untitled$ python3 ./pytest.py -i wlan0 -m 00:11:22:33:44:55
Traceback (most recent call last):
  File "./pytest.py", line 32, in <module>
    mac_address_search_result = re.search(r"\w\w:\w\w:\w\w:\w\w:\w\w:\w\w", ifconfig_result)
  File "/home/admix/anaconda3/lib/python3.7/re.py", line 183, in search
    return _compile(pattern, flags).search(string)
TypeError: cannot use a string pattern on a bytes-like object
 
на запрос в питоне вот этот
Смотри, есть несколько подходов к решению твоей задачи )
Linux way:
в linux есть отличная утилита macchanger
Устанавливается из стандартного репозитория
apt-get install macchanger
Использование примитивно простое
macchanger -r ${interface}
Желательно перед сменой выключать тот интерфейс, мак которого хочешь поменять.
ip link set eth1 down
macchanger -r eth1
ip link set eth1 up
putty_X3pDPOts9p.png

:
Python:
import uuid
print ("The MAC address in formatted way is : ", end="")
print (':'.join(['{:02x}'.format((uuid.getnode() >> ele) & 0xff)
for ele in range(0,8*6,8)][::-1]))

И самый простой:
Python:
import get_mac
get_mac_address()

Что касается твоей ошибки:
метод subprocess.check_output возвращает объект типа bytes
Чтобы преобразовать его в строку, используй метод decode
subprocess.check_output("ls").decode()
После этого уже можешь работать с ним как со строкой.
 
Мы в соцсетях:

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