Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 27, 2015 11:50:31

Leviaphan
Зарегистрирован: 2015-02-27
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

Поиск соответствий в файле со списком



Есть файл .txt. В нем должен быть список с двумя столбцами: в первом - mac адреса, во втором - имена компьютеров. С помощью python-скрипта необходимо получить mac адрес машины, на которой был запущен скрипт и определить какому имени компьютера он соответствует.
Также, подскажите, пожалуйста, как следует организовать этот список в файле?
P.S.: Машины все на ubuntu, если это имеет значение.

Офлайн

#2 Фев. 27, 2015 13:26:17

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10015
Репутация: +  857  -
Профиль   Отправить e-mail  

Поиск соответствий в файле со списком

Leviaphan
Машины все на ubuntu

В Fedora:
[guest@localhost ~]$ ifconfig | awk '/ether/{print $2}'
6c:62:6d:5b:f0:0a
[guest@localhost ~]$



Отредактировано py.user.next (Фев. 27, 2015 13:28:06)

Офлайн

#3 Фев. 27, 2015 20:07:34

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

Поиск соответствий в файле со списком

python скрипт

from uuid import getnode as get_mac
filename = 'mac_name'
mac = ':'.join(("%012x" % get_mac())[i:i+2] for i in range(0, 12, 2))
with open(filename) as f:
    for i in f.readlines():
        if i.startswith(mac):
            print(i[18:])
            break
    else:
        print('Not found :(')
файл с маками
mac_name
1a:bf:48:37:9c:dc Test
10:bf:48:37:9c:dc Andrey
1b:bf:48:37:9c:dc bbbb



————————————————
-*- Simple is better than complex -*-

Отредактировано terabayt (Фев. 27, 2015 20:10:11)

Офлайн

#4 Фев. 27, 2015 23:30:48

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10015
Репутация: +  857  -
Профиль   Отправить e-mail  

Поиск соответствий в файле со списком

[guest@localhost ~]$ ifconfig | awk '/ether/{print $2}'
6c:62:6d:5b:f0:0a
[guest@localhost ~]$

>>> from uuid import getnode as get_mac
>>> filename = 'mac_name'
>>> mac = ':'.join(("%012x" % get_mac())[i:i+2] for i in range(0, 12, 2))
>>> mac
'9b:7d:3c:f1:86:f4'
>>>

Через wireshark посмотрел, комп общается с сетью через 6c:62:6d:5b:f0:0a.

Почитал тут немного. Это, похоже, вообще надстройка над mac-адресацией.



Отредактировано py.user.next (Фев. 27, 2015 23:38:59)

Офлайн

#5 Фев. 28, 2015 11:21:59

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

Поиск соответствий в файле со списком

andrey@laptop:~$ ifconfig 
eth0 Link encap:Ethernet HWaddr 10:bf:48:37:9c:dc
UP BROADCAST MULTICAST MTU:1500 Metric:1
Прийнято пакунків:0 помилок передачі:0 пропущено:0 перерозхід:0 кадри:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
Прийнято байтів:0 (0,0 B) Передано байтів:0 (0,0 B)

wlan0 Link encap:Ethernet HWaddr 94:db:c9:b1:c9:fe
inet addr:10.3.1.245 Bcast:10.255.255.255 Mask:255.0.0.0
inet6 addr: fe80::96db:c9ff:feb1:c9fe/64 Scope:Посилання
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
Прийнято пакунків:90644 помилок передачі:0 пропущено:0 перерозхід:0 кадри:0
TX packets:55018 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
Прийнято байтів:128458418 (128,4 MB) Передано байтів:5809682 (5,8 MB)
подключен по wi-fi
andrey@laptop:~$ python
Python 2.7.6 (default, Mar 22 2014, 22:59:56) 
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from uuid import getnode as get_mac
>>> ':'.join(("%012x" % get_mac())[i:i+2] for i in range(0, 12, 2))
'94:db:c9:b1:c9:fe'
потом я подключил ethernet
andrey@laptop:~$ python
Python 2.7.6 (default, Mar 22 2014, 22:59:56) 
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from uuid import getnode as get_mac
>>> ':'.join(("%012x" % get_mac())[i:i+2] for i in range(0, 12, 2))
'10:bf:48:37:9c:dc'



————————————————
-*- Simple is better than complex -*-

Отредактировано terabayt (Фев. 28, 2015 11:23:33)

Офлайн

#6 Март 1, 2015 00:32:14

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10015
Репутация: +  857  -
Профиль   Отправить e-mail  

Поиск соответствий в файле со списком

[guest@localhost ~]$ ifconfig | grep ether
ether 6c:62:6d:5b:f0:0a txqueuelen 1000 (Ethernet)
[guest@localhost ~]$

Второй питон:
>>> from uuid import getnode as get_mac
>>> filename = 'mac_name'
>>> mac = ':'.join(("%012x" % get_mac())[i:i+2] for i in range(0, 12, 2))
>>> mac
'b3:b9:3b:57:1d:db'
>>>

Третий питон:
>>> from uuid import getnode as get_mac
>>> filename = 'mac_name'
>>> mac = ':'.join(("%012x" % get_mac())[i:i+2] for i in range(0, 12, 2))
>>> mac
'39:93:5c:ff:af:f9'
>>>



Офлайн

#7 Март 1, 2015 00:44:23

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

Поиск соответствий в файле со списком

andrey@laptop:~$ python3
Python 3.4.0 (default, Apr 11 2014, 13:05:11)
[GCC 4.8.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from uuid import getnode as get_mac
>>> mac = ':'.join(("%012x" % get_mac())[i:i+2] for i in range(0, 12, 2))
>>> mac
'10:bf:48:37:9c:dc'
>>>
andrey@laptop:~$ python
Python 2.7.6 (default, Mar 22 2014, 22:59:56)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from uuid import getnode as get_mac
>>> mac = ':'.join(("%012x" % get_mac())[i:i+2] for i in range(0, 12, 2))
>>> mac
'10:bf:48:37:9c:dc'
>>>
andrey@laptop:~$ ifconfig | grep eth0
eth0 Link encap:Ethernet HWaddr 10:bf:48:37:9c:dc
andrey@laptop:~$ uname -a
Linux laptop 3.13.0-46-generic #76-Ubuntu SMP Thu Feb 26 18:52:13 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

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 its eighth bit set to 1 as recommended in RFC 4122. “Hardware address” means the MAC address of a network interface, and on a machine with multiple network interfaces the MAC address of any one of them may be returned.

может у Вас не может получить и
If all attempts to obtain the hardware address fail, we choose a random 48-bit number with its eighth bit set to 1 as recommended in RFC 4122



————————————————
-*- Simple is better than complex -*-

Отредактировано terabayt (Март 1, 2015 00:47:47)

Офлайн

#8 Март 1, 2015 05:15:03

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10015
Репутация: +  857  -
Профиль   Отправить e-mail  

Поиск соответствий в файле со списком

terabayt
может у Вас не может получить и
Не, это в uuid.py такая фигня.

В функции getnode():
        getters = [_unixdll_getnode, _ifconfig_getnode]

Если меняю порядок на
        getters = [_ifconfig_getnode, _unixdll_getnode]
то правильно выдаёт.

При этом _unixdll_getnode представляет из себя такую вот ерунду:
def _unixdll_getnode():
    """Get the hardware address on Unix using ctypes."""
    _buffer = ctypes.create_string_buffer(16)
    _uuid_generate_time(_buffer)
    return UUID(bytes=bytes_(_buffer.raw)).node



Отредактировано py.user.next (Март 1, 2015 05:17:04)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version