Получение MAC-адреса - PullRequest
       61

Получение MAC-адреса

96 голосов
/ 01 октября 2008

Мне нужен кроссплатформенный метод определения MAC-адреса компьютера во время выполнения. Для windows можно использовать модуль 'wmi', и единственный метод под Linux, который я смог найти, это запустить ifconfig и запустить регулярное выражение через его вывод. Мне не нравится использовать пакет, который работает только на одной ОС, и анализ выходных данных другой программы выглядит не очень элегантно, не говоря уже о подверженности ошибкам.

Кто-нибудь знает метод кросс-платформенного метода (windows и linux) для получения MAC-адреса? Если нет, знает ли кто-нибудь более изящные методы, чем те, что я перечислил выше?

Ответы [ 13 ]

0 голосов
/ 26 июля 2013

Для Linux позвольте мне представить скрипт оболочки, который покажет mac-адрес и позволит изменить его (MAC-сниффинг).

 ifconfig eth0 | grep HWaddr |cut -dH -f2|cut -d\  -f2
 00:26:6c:df:c3:95

Могут уйти от аргументов (я не эксперт) попробуйте:

ifconfig etho | grep HWaddr
eth0      Link encap:Ethernet  HWaddr 00:26:6c:df:c3:95  

Чтобы изменить MAC, мы можем сделать:

ifconfig eth0 down
ifconfig eth0 hw ether 00:80:48:BA:d1:30
ifconfig eth0 up

изменит MAC-адрес на 00: 80: 48: BA: d1: 30 (временно, после перезагрузки вернется к фактическому).

0 голосов
/ 01 октября 2008

Для Linux вы можете получить MAC-адрес, используя SIOCGIFHWADDR ioctl.

struct ifreq    ifr;
uint8_t         macaddr[6];

if ((s = socket(AF_INET, SOCK_DGRAM, IPPROTO_IP)) < 0)
    return -1;

strcpy(ifr.ifr_name, "eth0");

if (ioctl(s, SIOCGIFHWADDR, (void *)&ifr) == 0) {
    if (ifr.ifr_hwaddr.sa_family == ARPHRD_ETHER) {
        memcpy(macaddr, ifr.ifr_hwaddr.sa_data, 6);
        return 0;
... etc ...

Вы отметили вопрос "питон". Я не знаю существующего модуля Python, чтобы получить эту информацию. Вы можете использовать ctypes для прямого вызова ioctl.

0 голосов
/ 01 октября 2008

Я не знаю единого пути, но вот кое-что, что вы могли бы найти полезным:

http://www.codeguru.com/Cpp/I-N/network/networkinformation/article.php/c5451

Что бы я сделал в этом случае, это заключил бы их в функцию, и в зависимости от ОС он выполнил бы правильную команду, проанализировал бы при необходимости и вернул только MAC-адрес, отформатированный так, как вы хотите. Конечно же, он такой, за исключением того, что вам нужно сделать это только один раз, и он выглядит чище от основного кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...