Интерфейсы eth0 ничто en0 ошибка списка для Mac OS

import netifaces as ni
ip = ni.ifaddresses("eth0")[ni.AF_INET]['addr']

ошибка

ip = ni.ifaddresses("eth0")[ni.AF_INET]['addr'] ValueError: Вы должны указать допустимое имя интерфейса.

ip = ni.ifaddresses("en0")[ni.AF_INET]['addr']

ошибка

ip = ni.ifaddresses("en0")[ni.AF_INET]['addr'] TypeError: списочные индексы должны быть целыми или кусочками, а не str

Кто-нибудь знает, почему Mac выдает такие ошибки?

1 ответ

Решение

Первая ошибка означает, что нет интерфейса с именем eth0, Действительно, это общее имя интерфейса в Linux, но не в MacOS.

Вторая ошибка означает, что вы пытаетесь извлечь поле, которое не существует. Есть информация о en0 но это массив, а не диктат. Это как сказать "hello"["addr"]нет доступа к "addr"элемент последовательности. Вы явно имеете в виду что-то вроде

ip = ni.ifaddresses("en0")[ni.AF_INET][0]['addr']

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

addrs = ni.ifaddresses('en0')
ips = [x['addr'] for x in addrs[ni.AF_INET]]

netifaces документация объясняет это довольно подробно.

Другие вопросы по тегам