Beispiel #1
0
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
Beispiel #2
0
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
Beispiel #3
0
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
Beispiel #4
0
    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
Beispiel #5
0
    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
Beispiel #6
0
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)]
Beispiel #7
0
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
Beispiel #8
0
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
Beispiel #9
0
 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
Beispiel #10
0
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)]
Beispiel #11
0
 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
Beispiel #12
0
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)]
Beispiel #13
0
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)
    ]
Beispiel #14
0
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)]
Beispiel #15
0
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)
        ]
Beispiel #16
0
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))
Beispiel #17
0
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))
Beispiel #18
0
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
Beispiel #19
0
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
Beispiel #20
0
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
Beispiel #21
0
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
Beispiel #22
0
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
Beispiel #23
0
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
Beispiel #24
0
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
Beispiel #25
0
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
Beispiel #26
0
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
Beispiel #27
0
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
Beispiel #28
0
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
Beispiel #29
0
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)]
Beispiel #30
0
 def validate(self):
     errors = {}
     if not validator.is_valid_ip_address(self.ip):
         errors['ip'] = 'Invalid IP: %s' % self.ip
     return errors
Beispiel #31
0
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))
Beispiel #32
0
 def validate(self):
     errors = {}
     if not validator.is_valid_ip_address(self.ip):
         errors["ip"] = "Invalid IP: %s" % self.ip
     return errors
Beispiel #33
0
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))
Beispiel #34
0
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)
    ]
Beispiel #35
0
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)]
Beispiel #36
0
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)]