code: def getInterfaceList (self, flags=0):
          
          if sys.platform == 'darwin':
              command = ['ifconfig', '-l']
              if flags & self.IFF_UP:
                  command.append('-u')
              # replace with subprocess.check_output() for Python 2.7
              res = subprocess.Popen(command, stdout=subprocess.PIPE).communicate()[0]
              return res.split()
          # initial 8kB buffer to hold interface data
          bufsize = 8192
          # 80kB buffer should be enough for most boxen
          max_bufsize = bufsize * 10
          while True:
              buf = array.array('c', '\0' * bufsize)
              ifreq = struct.pack("iP", buf.buffer_info()[1], buf.buffer_info()[0])
              try:
                  result = self._ioctl(self.SIOCGIFCONF, ifreq)
                  break
              except IOError as msg:
                  # in case of EINVAL the buffer size was too small
                  if msg[0] != errno.EINVAL or bufsize == max_bufsize:
                      raise
              # increase buffer
              bufsize += 8192
          # loop over interface names
          data = buf.tostring()
          iflist = []
          size, ptr = struct.unpack("iP", result)
          i = 0
          while i < size:
              ifconf = data[i:i+self.ifr_size]
              name = struct.unpack("16s%ds" % (self.ifr_size-16), ifconf)[0]
              name = name.split('\0', 1)[0]
              if name:
                  if flags and not (self.getFlags(name) & flags):
                      continue
                  iflist.append(name)
              i += self.ifr_size
          return iflist
docs: Get all interface names in a list.