Нетифейсы Python дают необычный результат

Раньше я пользовался нетифейсом без проблем, но недавно что-то изменилось. Я не уверен, является ли это ошибкой Windows 10 или питонов, или, может быть, самого нетифейса. В любом случае вот что происходит.

Согласно документам код:

import netifaces

netifaces.interfaces()

Должен дать мне результат, подобный этому:

['lo0', 'gif0', 'stf0', 'en0', 'en1', 'fw0']

Хотя в моем случае я получаю следующее:

['{E3EE4C5B-38D5-4E38-ABD3-912690B3333B}', '{07ED21E7-D11D-4FAE-BCAB-00748015A895}', '{9F401909-A4A5-4AB6-8617-DFA205446FC6}', '{073251CD-250D-4FAA-889A-560941A96782}', '{6613CF18-67E7-4499-8716-58EEC449E5C6}', '{C1568B39-575B-46B3-8EA7-95A7DBA33DD0}', '{F7F856C1-2EEE-4291-B42C-444C28D7C389}', '{2FD83117-396D-11E7-81F5-806E6F6E6963}']

На данный момент я не знаю, с чем имею дело и что выбрать дальше. Но используя случайным образом любой из результатов, подобных этому:

netifaces.ifaddresses('{07ED21E7-D11D-4FAE-BCAB-00748015A895}')

Также возвращает какие-то «зашифрованные» результаты:

{-1000: [{'addr': 'fc:f8:ae:15:6f:0e'}], 23: [{'addr': 'fe80::ec58:f02f:37d0:598b%4', 'netmask': 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff/128', 'broadcast': 'fe80::ec58:f02f:37d0:598b%4'}]}

Вместо того, как это представлено в документах (выглядит более удобным для пользователя, не так ли?):

{18: [{'addr': ''}], 2: [{'peer': '127.0.0.1', 'netmask': '255.0.0.0', 'addr': '127.0.0.1'}], 30: [{'peer': '::1', 'netmask': 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff', 'addr': '::1'}, {'peer': '', 'netmask': 'ffff:ffff:ffff:ffff::', 'addr': 'fe80::1%lo0'}]}

Может кто-нибудь объяснить мне, пожалуйста, что происходит и как «расшифровать» эти результаты? В конце концов я пытаюсь получить IP-адреса всех сетевых интерфейсов, которые использует мой компьютер.

ПРИМЕЧАНИЕ. Python 3.6, Netifaces 0.10.5, Windows 10.


person Devligue    schedule 02.06.2017    source источник
comment
Ответ здесь: stackoverflow.com/a/47781109/1145526. См. сообщение о psutil   -  person Dmytro Ovdiienko    schedule 06.06.2019


Ответы (1)


['lo0', 'gif0', 'stf0', 'en0', 'en1', 'fw0'] — это имена сетевых карт в системах unix. В Windows вы получаете GUID сетевого интерфейса. Чтобы получить так называемое «дружественное имя», вы можете посмотреть реестр Windows. Посмотрите этот ответ (на моем python 2.7 мне пришлось импортировать _winreg вместо winreg).

person Bartek Jablonski    schedule 02.06.2017