接口eth0无en0 en0列表错误,适用于Mac OS

时间:2019-01-03 11:33:55

标签: python python-netifaces

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 个答案:

答案 0 :(得分:1)

第一个错误意味着没有名为eth0的接口。实际上,这是Linux上的通用接口名称,而不是MacOS上的通用名称。

第二个错误意味着您正在尝试提取一个不存在的字段。有关于en0的信息,但这是一个数组,而不是字典。这就像说"hello"["addr"],无法访问序列的"addr":th元素。您显然是说类似

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实际上对此进行了详细解释。