mac os 接口 eth0 无 en0 列表错误

interfaces eth0 nothing en0 list error for mac os

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

错误

ip = ni.ifaddresses("eth0")[ni.AF_INET]['addr'] ValueError: You must specify a valid interface name.

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

错误

ip = ni.ifaddresses("en0")[ni.AF_INET]['addr'] TypeError: list indices must be integers or slices, not str

有谁知道为什么 mac 会出现这样的错误?

第一个错误表示没有名为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 documentation 实际上对此进行了相当详细的解释。