Как объединить ifconfig с openssl для изменения MAC-адреса - PullRequest
3 голосов
/ 07 апреля 2019

Я пытаюсь сделать однострочный спуфер MAC-адреса.Однако я не могу объединить ifconfig с OpenSSL.

Мой метод состоит в том, чтобы изменить MAC-адрес на случайно сгенерированный MAC-адрес, используя OpenSSL.Однако комбинирование кода для изменения MAC-адреса со случайным создателем MAC-адреса, похоже, не работает.

openssl rand -hex6 | sed 's/\(..\)/\1:/g;s?.$//

Этот код создает случайный MAC-адрес

sudo ifconfig en0 ether xyz

Этот кодустанавливает MAC-адрес равным xyz

Объединение этих двух строк не изменило MAC-адрес, как ожидалось.

sudo ifconfig en0 ether openssl rand -hex6 | sed 's/\(..\)/\1:/g;s?.$//

Этот код возвращает «Неверный аргумент»

Я ожидаюэто проблема форматирования, но я не смог найти подходящих руководств по форматированию в Интернете, и я новичок в bash.

1 Ответ

5 голосов
/ 07 апреля 2019

В этом коде куча проблем.Я думаю, что главное, чего вам не хватает, это то, что вам нужно $( ) для захвата вывода одной команды, чтобы вы могли использовать его в качестве аргумента для другой команды (и вам обычно нужны двойные кавычки вокруг этого, чтобы избежать неожиданного разбора),То, как вы это написали, openssl rand -hex6 не рассматривается как команда, просто как еще три аргумента для sudo ifconfig (и это вывод из sudo ifconfig, который передается в sed).

Вам также нужен пробел в -hex 6, а в конце команды sed используются несовместимые разделители и отсутствует закрывающая кавычка.Кроме того, вместо использования группы захвата в первой команде sed, вы можете просто использовать &, чтобы получить всю совпадающую строку (т. Е. s/../&:/g).

Вот исправленная версия:

sudo ifconfig en0 ether "$(openssl rand -hex 6 | sed 's/../&:/g;s/:$//')"

РЕДАКТИРОВАТЬ: как отметил @Cyrus в комментарии, пространство MAC-адресов подразделяется на глобально-локально управляемое и uncast-против многоадресного (см. Wikipedia ).Использование многоадресного адреса может вызвать проблемы, поэтому было бы лучше сделать так, чтобы вторая цифра была четной.Это немного сложно, поэтому я собираюсь уклониться от вопроса, как это сделать ...

...