def get_eth_info(self):
"""
?????
1. ??bond???bond0
2. ???????eth0:1
3. ?ip???eth0(1.1.1.1,2.2.2.2)
"""
data = []
addrs = psutil.net_if_addrs()
stats = psutil.net_if_stats()
for name, entries in addrs.iteritems():
eth = {
'name': name,
'mac': '00:00:00:00:00:00',
'ip': '',
'mask': '',
'broadcast': '',
'status': 'Unknown',
'speed': 0
}
try: # windows???
eth['name'] = name.decode('gbk')
except:
eth['name'] = name
if name in stats:
eth['status'] = 'Active' if int(stats[name].isup) else 'Inactive'
eth['speed'] = stats[name].speed
for entry in entries:
if entry.family == psutil.AF_LINK:
eth['mac'] = entry.address.upper()
elif entry.family == socket.AF_INET:
if eth['ip']:# ??????ip????????????
data.append(copy.deepcopy(eth))
eth['ip'] = entry.address
eth['mask'] = entry.netmask
eth['broadcast'] = entry.broadcast
else: # ????IPV6
continue
data.append(eth)
# ???????????????mac?????00:00:00:00:00:00????????????":"
for item in data:
# ??????
if ':' not in item['name']:
continue
# ???mac?????????????????????":"????
if item['mac'] != '00:00:00:00:00:00':
continue
name = item['name'].rsplit(':', 1)[0]
for iitem in data:
if name == iitem['name']:
item['mac'] = iitem['mac']
break
data.sort(key=lambda x: x['name'])
return data
评论列表
文章目录