LINUX.ORG.RU

Как узнать mac адрес на машине при помощи Python

 


0

1

Подскажите как определить (любой) из мак адресов на машине, мне нужно каким-нибудь образом получить уникальный номер машины. Смотрел примеры, но там все зависит от сетевого интерфейса, а я в принципе не знаю какой у машины будет интерфейс, мне бы хоть какой.


Ну значит гугли как на python получить список сетевых интерфейсов, а потом гугли как получить параметры сетевого интерфейса.

anonymous
()

https://docs.python.org/3/library/uuid.html

uuid.getnode() Get the hardware address as a 48-bit positive integer. The first time this runs, it may launch a separate program, which could be quite slow. If all attempts to obtain the hardware address fail, we choose a random 48-bit number with the multicast bit (least significant bit of the first octet) set to 1 as recommended in RFC 4122. “Hardware address” means the MAC address of a network interface. On a machine with multiple network interfaces, universally administered MAC addresses (i.e. where the second least significant bit of the first octet is unset) will be preferred over locally administered MAC addresses, but with no other ordering guarantees.

Changed in version 3.7: Universally administered MAC addresses are preferred over locally administered MAC addresses, since the former are guaranteed to be globally unique, while the latter are not.

Deleted
()
Ответ на: комментарий от Deleted

Спасибо. Думаю решает, вечером посмотрю, что да как.

da17
() автор топика

Вот поэтому я никогда не буду использовать педон -

у нас все это делается с полоборота -

import java.net.*;

public class Mac {
    public static void main(String[] args) throws Exception {
	InetAddress ip = InetAddress.getLocalHost();
	System.out.printf("IP address  : %s\n", ip.getHostAddress());
	NetworkInterface network = NetworkInterface.getByInetAddress(ip);
	byte[] mac = network.getHardwareAddress();
	StringBuilder sb = new StringBuilder();
	for (int i = 0; i < mac.length; i++) {
	    sb.append(String.format("%02X%s", mac[i], (i < mac.length - 1) ? "-" : ""));		
	}
	System.out.printf("MAC address : %s\n", sb.toString());
    }
}
Bioreactor ★★★★★
()
Ответ на: комментарий от Bioreactor

Такие простынки теперь называются «с полоборота»? :) :) :)

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

Stanson ★★★★★
()
import re
from uuid import getnode as mac

print (':'.join(re.findall('..', '%012x' % mac())))
anonymous
()

cat /sys/class/net/!(lo)/address | head -n 1

vvviperrr ★★★★★
()

Да я вообще полазил по интернету, понял что мак адрес подходит слабо, т.к. у машины несколько сетевых интерфейсов может быть и нет никаких гарантий что то что нужно будет указан, решил пока брать machine-id

da17
() автор топика
Ответ на: комментарий от da17

никто не запращает взять и mac и machine-id и что угодно еще, всё это дело склеить и захешировать

anonymous
()
Ответ на: комментарий от Dred

А теперь все вместе посмотрим, где анонизмус запостил откровенную халтуру.

Нужен список ВСЕХ адресов v.4 & v.6 с соответствующими маками, даже для VirtualBox.

import java.net.InetAddress;
import java.net.NetworkInterface;
import java.util.Enumeration;

public class MacAll {
    public static void main(String[] args) throws Exception {
        Enumeration<NetworkInterface> nis = NetworkInterface.getNetworkInterfaces();
        while (nis.hasMoreElements()) {
            NetworkInterface ni = (NetworkInterface) nis.nextElement();
            Enumeration<InetAddress> ias = ni.getInetAddresses();
            while (ias.hasMoreElements()) {
                InetAddress ia = (InetAddress) ias.nextElement();
                System.out.printf("IP  address : %s\n", ia.getHostAddress());
                byte[] mac = ni.getHardwareAddress();
                if (mac == null ) {
                    System.out.println("MAC address : -\n");
                    continue;
                }
                StringBuilder sb = new StringBuilder();
                for (int i = 0; i < mac.length; i++) {
                    sb.append(String.format("%02X%s", mac[i], (i < mac.length - 1) ? ":" : ""));
                }
                System.out.printf("MAC address : %s\n\n", sb.toString());
            }
        }
    }
}

В кулькакерские скриптовые недоязычки очень низок __порог вхождения__.

Вот недоучки-студиоузы и маршируют стройными рядами в кульхацкеры-хеловордисты - локалхосты админить.

Только написАть реальные программы «масштаба предприятия»(С) на недоязычках невозможно - только напИсать.

Поэтому автора гвидопыха и погнали из «Гугла» «на мороз»(С)(TM).

Bioreactor ★★★★★
()
Последнее исправление: Bioreactor (всего исправлений: 3)
Ответ на: комментарий от Bioreactor

Очень похоже на нытьё неосилятора «скриптового недоязычка». Ты не забывай что жабка накладывает неиллюзорные требования по памяти, времени и жирному рантайму — у гвидобейсика таких проблем нет.

anonymous
()
Ответ на: комментарий от Bioreactor

кулькакерские скриптовые недоязычки очень низок __порог вхождения__.

А в джаву он ну настолько высок, что каждый день разгребаю тонны говнокода на нем.

Dred ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.