def _parse_dhcp_settings(html): settings = DHCPServerSettings() match_obj = re.compile('document.LANDhcpsSet.DHEN.checked = (0|1);').search(html) if match_obj is None: raise RouterParseError('Cannot determine DHCP enabled status') settings.set_enabled_status(match_obj.group(1) == '1') match_obj = re.compile('document.LANDhcpsSet.dips.value = \(\("(.+?)"').search(html) if match_obj is None: raise RouterParseError('Cannot determine DHCP start IP address') ip_start = match_obj.group(1) if not validator.is_valid_ip_address(ip_start): raise RouterParseError('IP start address is invalid: %s' % ip_start) settings.set_ip_start(ip_start) match_obj = re.compile('document.LANDhcpsSet.dipe.value = \(\("(.+?)"').search(html) if match_obj is None: raise RouterParseError('Cannot determine DHCP end IP address') ip_end = match_obj.group(1) if not validator.is_valid_ip_address(ip_end): raise RouterParseError('IP end address is invalid: %s' % ip_end) settings.set_ip_end(ip_end) return settings
def _parse_dhcp_settings(html): regex = '//\s+nvram = \{(.+?)\};\n\nxob = ' match_object = re.compile(regex, re.DOTALL).search(html) if match_object is None: raise RouterParseError('Cannot parse DHCP settings') array = _parse_data_structure(match_object.group(1)) try: ip_start, ip_end = array['dhcpd_startip'], array['dhcpd_endip'] is_enabled = array['lan_proto'] == 'dhcp' except KeyError: raise RouterParseError('Bad nvram for DHCP settings') if not validator.is_valid_ip_address(ip_start): raise RouterParseError('Invalid DHCP start IP: %s' % ip_start) if not validator.is_valid_ip_address(ip_end): raise RouterParseError('Invalid DHCP end IP: %s' % ip_end) obj = DHCPServerSettings() obj.set_enabled_status(is_enabled) obj.set_ip_start(ip_start) obj.set_ip_end(ip_end) obj.ensure_valid() return obj
def validate(self): errors = {} if not validator.is_valid_ip_address(self._ip_start): errors['ip_start'] = 'Invalid start IP: %s' % self._ip_start if not validator.is_valid_ip_address(self._ip_end): errors['ip_end'] = 'Invalid end IP: %s' % self._ip_end if converter.ip2long(self._ip_start) > converter.ip2long(self._ip_end): errors['ip_range'] = 'Invalid IP range: from %s to %s' % (self._ip_start, self._ip_end) return errors
def validate(self): errors = {} if not validator.is_valid_ip_address(self._ip_start): errors['ip_start'] = 'Invalid start IP: %s' % self._ip_start if not validator.is_valid_ip_address(self._ip_end): errors['ip_end'] = 'Invalid end IP: %s' % self._ip_end if converter.ip2long(self._ip_start) > converter.ip2long(self._ip_end): errors['ip_range'] = 'Invalid IP range: from %s to %s' % ( self._ip_start, self._ip_end) return errors
def parse_dns_servers(html): regex = re.compile('sta\[11\]\+" : ","(.+?)"') match_object = regex.search(html) if match_object is None: raise RouterParseError("Cannot parse dns servers") dns_ips = match_object.group(1).split(", ") return [ip for ip in dns_ips if validator.is_valid_ip_address(ip)]
def _parse_connected_clients_list(contents): regex = "<form(?:.+?)<tr(?:.+?)<tr bgcolor=(?:.+?)<font size=2>(.+?)</td><td><font size=2>(.+?)</td><td><font size=2>([0-9]+)</td>" regex_dhcp_list = re.compile(regex, re.DOTALL) lst = ConnectedClientsList() for id, match_groups in enumerate(re.findall(regex_dhcp_list, contents), start=1): ip, mac, lease_time = match_groups if not validator.is_valid_ip_address(ip): raise RouterParseError("Invalid IP address: %s" % ip) if not validator.is_valid_mac_address(mac): raise RouterParseError("Invalid MAC address: %s" % mac) lease_time = int(lease_time) item = ConnectedClientsListItem() item.set_client_name("Client %d" % id) item.set_mac(converter.normalize_mac(mac)) item.set_ip(ip) item.set_lease_time(lease_time) lst.append(item) return lst
def validate(self): errors = {} if not validator.is_valid_ip_address(self.ip): errors['ip'] = 'Invalid IP address: %s' % self.ip if not validator.is_valid_mac_address_normalized(self.mac): errors['mac'] = 'Invalid normalized MAC address: %s' % self.mac return errors
def parse_dns_servers(html): regex = re.compile('sta\[11\]\+" : ","(.+?)"') match_object = regex.search(html) if match_object is None: raise RouterParseError('Cannot parse dns servers') dns_ips = match_object.group(1).split(', ') return [ip for ip in dns_ips if validator.is_valid_ip_address(ip)]
def _parse_dns_servers(html): regex = re.compile('Domain Name Server <!><br></b></td>(?:.+?)>(.+?)</td>', re.DOTALL) match_object = regex.search(html) if match_object is None: raise RouterParseError('Cannot parse DNS servers information') ips = match_object.group(1) #<br> separated list of IPs return [ip for ip in ips.split('<br>') if validator.is_valid_ip_address(ip)]
def _parse_dns_servers(contents): regex = "name=\"dns[0-9]\"(?:.+?)value=(.*?)></td>" regex_dns_servers = re.compile(regex, re.DOTALL) servers = re.findall(regex_dns_servers, contents) return [ ip.strip(" ") for ip in servers if validator.is_valid_ip_address(ip) ]
def _parse_dns_servers(status_js): regex = re.compile('//\ndns = \[(.+?)\];') match_object = regex.search(status_js) if match_object is None: return [] try: ips = ast.literal_eval(match_object.group(1)) except Exception: return [] else: return [ip.strip(' ') for ip in ips if validator.is_valid_ip_address(ip)]
def _parse_dns_servers(status_js): regex = re.compile('//\ndns = \[(.+?)\];') match_object = regex.search(status_js) if match_object is None: return [] try: ips = ast.literal_eval(match_object.group(1)) except Exception: return [] else: return [ ip.strip(' ') for ip in ips if validator.is_valid_ip_address(ip) ]
def _parse_dmz_settings(contents): array_name = 'DMZInf' result = _extract_js_array_data(contents, array_name) try: ip = result[1].strip(' ') if not validator.is_valid_ip_address(ip): raise RouterParseError('Invalid IP address: %s' % ip) obj = DMZSettings() obj.set_supported_status(True) obj.set_enabled_status(result[0] == 1) obj.set_ip(result[1]) return obj except IndexError, e: raise RouterParseError(repr(e))
def _parse_dmz_settings(contents): array_name = 'DMZInf' result = _extract_js_array_data(contents, array_name) try: ip = result[1].strip(' ') if not validator.is_valid_ip_address(ip): raise RouterParseError('Invalid IP address: %s' % ip) obj = DMZSettings() obj.set_supported_status(True) obj.set_enabled_status(result[0] == 1) obj.set_ip(result[1]) return obj except IndexError as e: raise RouterParseError(repr(e))
def _parse_dmz_settings_WGR614v8(html): match_object = re.compile('var lanIpAddr = "(.+?)";').search(html) if match_object is None: raise RouterParseError('Cannot parse DMZ IP') ip = match_object.group(1) if not validator.is_valid_ip_address(ip): raise RouterParseError('Invalid DMZ IP address: %s' % ip) match_object = re.compile("var dmzEnable = \"([0-1])\";").search(html) if match_object is None: raise RouterParseError('Cannot parse DMZ Enabled Status') is_enabled = True if int(match_object.group(1)) == 1 else False settings = DMZSettings() settings.set_supported_status(True) settings.set_ip(ip) settings.set_enabled_status(is_enabled) return settings
def _parse_dmz_settings(html): settings = DMZSettings() settings.set_reboot_requirement_status(False) settings.set_supported_status(True) enabled = '<input type=checkbox name="enabled" value="ON" checked' in html settings.set_enabled_status(enabled) regex = re.compile('<input type=text name="ip" size=15' ' maxlength=16 value="(.+?)"') match_object = regex.search(html) if match_object is None: raise RouterParseError('Cannot determine DMZ IP!') ip = match_object.group(1) if not validator.is_valid_ip_address(ip): if not enabled: ip = '192.168.1.1' # sane default value else: raise RouterParseError('Invalid IP address!') settings.set_ip(ip) return settings
def _parse_dhcp_settings(html): is_enabled = 'var choice= 2 ;' in html regex = re.compile('<input type=text name="dhcpRangeStart" size=16 ' 'maxlength=15 value="(.+?)"' '(?:.+?)' '<input type=text name="dhcpRangeEnd" size=16 ' 'maxlength=15 value="(.+?)"', re.DOTALL) match_object = regex.search(html) if match_object is None: raise RouterParseError('Cannot determine DMZ range!') for ip in match_object.groups(): if not validator.is_valid_ip_address(ip): raise RouterParseError('Invalid DHCP IP: %s' % ip) ip_start, ip_end = match_object.groups() obj = DHCPServerSettings() obj.set_enabled_status(is_enabled) obj.set_ip_start(ip_start) obj.set_ip_end(ip_end) obj.ensure_valid() return obj
def _parse_connected_clients_list(html): lst = ConnectedClientsList() regex = "<tr>(?:.+?)<span class=\"ttext\">(.+?)</span>(?:.+?)<span class=\"ttext\">(.+?)</span>(?:.+?)<span class=\"ttext\">(.+?)</span>(?:.+?)</tr>" for ip, name, mac in re.compile(regex, re.DOTALL).findall(html): if ip == '--': # I've seen such entries on WGR614v7 only.. let's ignore them continue if not validator.is_valid_ip_address(ip): raise RouterParseError('Invalid IP address: %s' % ip) item = ConnectedClientsListItem() item.set_client_name(name) item.set_mac(converter.normalize_mac(mac)) item.set_ip(ip) item.set_lease_time(None) # no lease time information available lst.append(item) return lst
def _parse_connected_clients_list(html): dhcp_list = re.compile('var dhcpList=new Array\((.*)\);').search(html) if dhcp_list is None: raise RouterParseError('Cannot find DHCP list.') dhcp_list = dhcp_list.group(1) results = re.compile("'(.+?);(.+?);(.+?);[01];(\d+)'").findall(dhcp_list) lst = ConnectedClientsList() for client_name, ip, mac, lease_time in results: if not validator.is_valid_ip_address(ip): raise RouterParseError('Invalid IP address: %s' % ip) if not validator.is_valid_mac_address(mac): raise RouterParseError('Invalid MAC address: %s' % mac) item = ConnectedClientsListItem() item.set_client_name(client_name) item.set_mac(converter.normalize_mac(mac)) item.set_ip(ip) item.set_lease_time(int(lease_time)) lst.append(item) return lst
def _parse_connected_clients_list(html): regex_dhcp_list = "<tr class=table2 align=center><td><font size=2>(.+?)</td><td><font size=2>(.+?)</td>" lst = ConnectedClientsList() for id, (ip, mac) in enumerate(re.findall(regex_dhcp_list, html), start=1): if ip == "None": # this entry is added when there are no connected clients break if not validator.is_valid_ip_address(ip): raise RouterParseError('Invalid IP address: %s' % ip) if not validator.is_valid_mac_address(mac): raise RouterParseError('Invalid MAC address: %s' % mac) item = ConnectedClientsListItem() item.set_client_name('Client %d' % id) item.set_mac(converter.normalize_mac(mac)) item.set_ip(ip) item.set_lease_time(0) lst.append(item) return lst
def _parse_connected_clients_list(html): # the last 2 elements of the data array are not needed result = _extract_js_array_data(html, 'DHCPDynList')[:-2] lst = ConnectedClientsList() # each 4 subsequent items are related (client_name, mac_address, ip, lease_time) for client_name, mac, ip, lease_time in split_in_groups(result, 4): if not validator.is_valid_ip_address(ip): raise RouterParseError('Invalid IP address: %s' % ip) item = ConnectedClientsListItem() item.set_client_name(client_name) item.set_mac(converter.normalize_mac(mac)) item.set_ip(ip) if lease_time == 'Permanent': item.set_lease_time(item.__class__.LEASE_TIME_PERMANENT) else: item.set_lease_time(_parse_lease_time(lease_time)) lst.append(item) return lst
def _parse_dns_servers(contents): regex = "name=\"dns[0-9]\"(?:.+?)value=(.*?)></td>" regex_dns_servers = re.compile(regex, re.DOTALL) servers = re.findall(regex_dns_servers, contents) return [ip.strip(" ") for ip in servers if validator.is_valid_ip_address(ip)]
def validate(self): errors = {} if not validator.is_valid_ip_address(self.ip): errors['ip'] = 'Invalid IP: %s' % self.ip return errors
def _parse_dns_servers(data_array): try: dns_ips = data_array[11].split(' , ') return [ip.strip(' ') for ip in dns_ips if validator.is_valid_ip_address(ip)] except IndexError, e: raise RouterParseError('Cannot access the array index: %s' % repr(e))
def validate(self): errors = {} if not validator.is_valid_ip_address(self.ip): errors["ip"] = "Invalid IP: %s" % self.ip return errors
def _parse_dns_servers(data_array): try: dns_ips = data_array[11].split(' , ') return [ip.strip(' ') for ip in dns_ips if validator.is_valid_ip_address(ip)] except IndexError as e: raise RouterParseError('Cannot access the array index: %s' % repr(e))
def _parse_dns_servers(html): regex_dns_servers = re.compile('name="dns[1,2]" value="(.+?)\s') servers = re.findall(regex_dns_servers, html) return [ ip.strip(" ") for ip in servers if validator.is_valid_ip_address(ip) ]
def _parse_dns_servers(html): dns_ips = re.compile('dns[12]="(.+?)";').findall(html) return [ip.strip(' ') for ip in dns_ips if validator.is_valid_ip_address(ip)]
def _parse_dns_servers(html): regex_dns_servers = re.compile('name="dns[1,2]" value="(.+?)\s') servers = re.findall(regex_dns_servers, html) return [ip.strip(" ") for ip in servers if validator.is_valid_ip_address(ip)]