def _parse_access_point(self, cell): """ Parse a single cell from the output of iwlist. Keyword arguments: cell -- string containing the cell information Returns: A dictionary containing the cell networks properties. """ ap = WirelessNetwork() ap.essid = misc.RunRegex(WirelessRegexPatterns.essid, cell) try: ap.essid = misc.to_unicode(ap.essid) except (UnicodeDecodeError, UnicodeEncodeError): print 'Unicode problem with current network essid, ignoring!!' return None if ap.essid in ['<hidden>', ""]: ap.essid = 'Hidden' ap.hidden = True else: ap.hidden = False ap.channel = misc.RunRegex(WirelessRegexPatterns.channel, cell) if ap.channel == None: freq = misc.RunRegex(WirelessRegexPatterns.freq, cell) ap.channel = self._freq_to_channel(freq) ap.bssid = misc.RunRegex(WirelessRegexPatterns.ap_mac, cell) ap.mode = misc.RunRegex(WirelessRegexPatterns.mode, cell) if (WirelessRegexPatterns.strength.match(cell)): [(strength, max_strength)] = WirelessRegexPatterns.strength.findall(cell) if max_strength: ap.quality = 100 * int(strength) // int(max_strength) else: ap.quality = int(strength) elif misc.RunRegex(WirelessRegexPatterns.altstrength,cell): ap.quality = misc.RunRegex(WirelessRegexPatterns.altstrength, cell) else: ap.quality = -1 if misc.RunRegex(WirelessRegexPatterns.signaldbm, cell): ap.strength = misc.RunRegex(WirelessRegexPatterns.signaldbm, cell) return ap
def _parse_access_point(self, cell): """ Parse a single cell from the output of iwlist. Keyword arguments: cell -- string containing the cell information Returns: A dictionary containing the cell networks properties. """ ap = WirelessNetwork() ap.essid = misc.RunRegex(WirelessRegexPatterns.essid, cell) try: ap.essid = misc.to_unicode(ap.essid) except (UnicodeDecodeError, UnicodeEncodeError): print 'Unicode problem with current network essid, ignoring!!' return None if ap.essid in ['<hidden>', ""]: ap.essid = 'Hidden' ap.hidden = True else: ap.hidden = False ap.channel = misc.RunRegex(WirelessRegexPatterns.channel, cell) if ap.channel == None: freq = misc.RunRegex(WirelessRegexPatterns.freq, cell) ap.channel = self._freq_to_channel(freq) ap.bssid = misc.RunRegex(WirelessRegexPatterns.ap_mac, cell) ap.mode = misc.RunRegex(WirelessRegexPatterns.mode, cell) if (WirelessRegexPatterns.strength.match(cell)): [(strength, max_strength)] = WirelessRegexPatterns.strength.findall(cell) if max_strength: ap.quality = 100 * int(strength) // int(max_strength) else: ap.quality = int(strength) elif misc.RunRegex(WirelessRegexPatterns.altstrength,cell): ap.quality = misc.RunRegex(WirelessRegexPatterns.altstrength, cell) else: ap.quality = -1 if misc.RunRegex(WirelessRegexPatterns.signaldbm, cell): ap.strength = misc.RunRegex(WirelessRegexPatterns.signaldbm, cell) return ap def _freq_to_channel(self, freq): """ Translate the specified frequency to a channel. Note: This function is simply a lookup dict and therefore the freq argument must be in the dict to provide a valid channel. Keyword arguments: freq -- string containing the specified frequency Returns: The channel number, or None if not found. """ ret = None freq_dict = {'2.412 GHz': 1, '2.417 GHz': 2, '2.422 GHz': 3, '2.427 GHz': 4, '2.432 GHz': 5, '2.437 GHz': 6, '2.442 GHz': 7, '2.447 GHz': 8, '2.452 GHz': 9, '2.457 GHz': 10, '2.462 GHz': 11, '2.467 GHz': 12, '2.472 GHz': 13, '2.484 GHz': 14 } try: ret = freq_dict[freq] except KeyError: print "Couldn't determine channel number for frequency: " + str(freq) return ret def get_ip(self): """ Get the IP address of the interface. Returns: The IP address of the interface in dotted quad form. """ cmd = 'ifconfig %s' + self.interface_name output = misc.Run(cmd) return misc.RunRegex(WirelessRegexPatterns.ip, output) def set_ip(self, new_ip): ''' Sets the IP of the current network interface. ''' cmd = 'ifconfig %s %s' % (self.interface_name, new_ip) misc.Run(cmd) def connect(self, finished_callback): ''' Connects to the network in self.current_network. ''' raise NotImplementedError('connect is not implemented in this class.') def cancel_connection_attempt(self): raise NotImplementedError( 'cancel_connection_attempt is not implemented in this class.' )