def find_default_interface(self):
"""Look through the list of interfaces for the non-loopback interface"""
import psutil
try:
if self.interfaces is None:
self.interfaces = {}
# Look to see which interfaces are up
stats = psutil.net_if_stats()
for interface in stats:
if interface != 'lo' and interface[:3] != 'ifb' and stats[interface].isup:
self.interfaces[interface] = {'packets': 0}
if len(self.interfaces) > 1:
# See which interfaces have received data
cnt = psutil.net_io_counters(True)
for interface in cnt:
if interface in self.interfaces:
self.interfaces[interface]['packets'] = \
cnt[interface].packets_sent + cnt[interface].packets_recv
remove = []
for interface in self.interfaces:
if self.interfaces[interface]['packets'] == 0:
remove.append(interface)
if len(remove):
for interface in remove:
del self.interfaces[interface]
if len(self.interfaces) > 1:
# Eliminate any with the loopback address
remove = []
addresses = psutil.net_if_addrs()
for interface in addresses:
if interface in self.interfaces:
for address in addresses[interface]:
if address.address == '127.0.0.1':
remove.append(interface)
break
if len(remove):
for interface in remove:
del self.interfaces[interface]
except Exception:
pass
评论列表
文章目录