示例#1
0
def parse_connected_clients_list(html):
    lst = ConnectedClientsList()

    regex = re.compile("var x=new Array\((.+?)\);")
    match_object = regex.search(html)
    if match_object is None:
        raise RouterParseError("Cannot parse connected clients list")
    match_str = match_object.group(1)
    if match_str == '""':
        return lst

    import ast

    try:
        list_literal = "[%s]" % match_str
        list_items = ast.literal_eval(list_literal)
        list_items.pop()  # empty 'sentinel' string - not needed
        list_items = [v.decode("utf-8", "ignore") if isinstance(v, bytes) else v for v in list_items]
        for ip, name, mac in split_in_groups(list_items, 3):
            item = ConnectedClientsListItem()
            item.set_client_name(name)
            item.set_mac(converter.normalize_mac(mac))
            item.set_ip(ip)
            item.set_lease_time(item.__class__.LEASE_TIME_PERMANENT)
            lst.append(item)
        return lst
    except Exception:
        return lst
示例#2
0
def _parse_connected_clients_list(html):
    lst = ConnectedClientsList()

    regex = re.compile('dhcpd_lease = \[ (.+?)\];\nlist = \[')
    match_object = regex.search(html)
    if match_object is None:
        return lst

    def parse_lease_time(lease):
        regex = '(\d+) days?, (\d+):(\d+):(\d+)'
        match_object = re.compile(regex).search(lease)
        if match_object is None:
            return ConnectedClientsListItem.LEASE_TIME_PERMANENT

        days, hours, minutes, seconds = map(int, match_object.groups())
        return days * 86400 + hours * 3600 + minutes * 60 + seconds

    try:
        array = ast.literal_eval('[%s]' % match_object.group(1))
        for name, ip, mac, lease_time in array:
            item = ConnectedClientsListItem()
            item.set_client_name(name)
            item.set_ip(ip)
            item.set_mac(converter.normalize_mac(mac))
            item.set_lease_time(parse_lease_time(lease_time))
            lst.append(item)
        return lst
    except ValueError:
        raise RouterParseError('Cannot parse connected clients!')
示例#3
0
def parse_addr_reservation_list(html):
    """
    Entries look like this:
        {status?}, {mac}, {ip_last_part}, {optional description}
        "1","00-11-11-11-11-11","52","",
        "1","00-11-11-11-11-11","52","R_user-cc5c756950",

    The status in front (0 or 1) is not important.
    It's 0 for all entries, when the list is empty,
    and 1 when there's at least one real entry.

    The IP prefix is always 192.168.1.

    The optional description only appears in entries
    not added manually, but automatically via a 'Reserve' checkbox in
    the connected clients list
    """
    regex = re.compile('^"0|1","(.+?)","([0-9]+)","(?:.*?)",\n')
    reservation_list = DHCPReservationList()
    reservation_list.set_reboot_requirement_status(False)
    for mac, ip_last_part in regex.findall(html):
        if ip_last_part == "0":
            continue
        ip = "192.168.1.%s" % ip_last_part
        item = DHCPReservationListItem()
        item.set_mac(converter.normalize_mac(mac))
        item.set_ip(ip)
        item.set_enabled_status(True)
        reservation_list.append(item)
    return reservation_list
示例#4
0
文件: v1_23.py 项目: cyroxx/roscraco
def _parse_connected_clients_list(html):
    lst = ConnectedClientsList()

    regex = re.compile('dhcpd_lease = \[ (.+?)\];\nlist = \[')
    match_object = regex.search(html)
    if match_object is None:
        return lst

    def parse_lease_time(lease):
        regex = '(\d+) days?, (\d+):(\d+):(\d+)'
        match_object = re.compile(regex).search(lease)
        if match_object is None:
            return ConnectedClientsListItem.__class__.LEASE_TIME_PERMANENT

        days, hours, minutes, seconds = map(int, match_object.groups())
        return days * 86400 + hours * 3600 + minutes * 60 + seconds

    try:
        array = ast.literal_eval('[%s]' % match_object.group(1))
        for name, ip, mac, lease_time in array:
            item = ConnectedClientsListItem()
            item.set_client_name(name)
            item.set_ip(ip)
            item.set_mac(converter.normalize_mac(mac))
            item.set_lease_time(parse_lease_time(lease_time))
            lst.append(item)
        return lst
    except ValueError:
        raise RouterParseError('Cannot parse connected clients!')
示例#5
0
def _parse_mac_address(html):
    regex = re.compile('<!--Wan Information-->(?:.+?)Physical Address(?:.+?)'
                       '>((?:[a-f0-9]{2}:){5}[a-f0-9]{2})</font>', re.DOTALL)
    match_object = regex.search(html)
    if match_object is None:
        raise RouterParseError('Cannot determine MAC address!')
    return converter.normalize_mac(match_object.group(1))
示例#6
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
示例#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
示例#8
0
def parse_addr_reservation_list(html):
    """
    Entries look like this:
        {status?}, {mac}, {ip_last_part}, {optional description}
        "1","00-11-11-11-11-11","52","",
        "1","00-11-11-11-11-11","52","R_user-cc5c756950",

    The status in front (0 or 1) is not important.
    It's 0 for all entries, when the list is empty,
    and 1 when there's at least one real entry.

    The IP prefix is always 192.168.1.

    The optional description only appears in entries
    not added manually, but automatically via a 'Reserve' checkbox in
    the connected clients list
    """
    regex = re.compile('^"0|1","(.+?)","([0-9]+)","(?:.*?)",\n')
    reservation_list = DHCPReservationList()
    reservation_list.set_reboot_requirement_status(False)
    for mac, ip_last_part in regex.findall(html):
        if ip_last_part == '0':
            continue
        ip = '192.168.1.%s' % ip_last_part
        item = DHCPReservationListItem()
        item.set_mac(converter.normalize_mac(mac))
        item.set_ip(ip)
        item.set_enabled_status(True)
        reservation_list.append(item)
    return reservation_list
示例#9
0
def parse_connected_clients_list(html):
    lst = ConnectedClientsList()

    regex = re.compile('var x=new Array\((.+?)\);')
    match_object = regex.search(html)
    if match_object is None:
        raise RouterParseError('Cannot parse connected clients list')
    match_str = match_object.group(1)
    if match_str == '""':
        return lst

    import ast
    try:
        list_literal = '[%s]' % match_str
        list_items = ast.literal_eval(list_literal)
        list_items.pop()  # empty 'sentinel' string - not needed
        list_items = [
            v.decode('utf-8', 'ignore') if isinstance(v, bytes) else v
            for v in list_items
        ]
        for ip, name, mac in split_in_groups(list_items, 3):
            item = ConnectedClientsListItem()
            item.set_client_name(name)
            item.set_mac(converter.normalize_mac(mac))
            item.set_ip(ip)
            item.set_lease_time(item.__class__.LEASE_TIME_PERMANENT)
            lst.append(item)
        return lst
    except Exception:
        return lst
示例#10
0
def _parse_mac_address(html):
    regex = re.compile('Internet Port(?:.+?)MAC Address </b></td>(?:.+?)>(.+?)</td>', re.DOTALL)
    match_object = regex.search(html)
    if match_object is None:
        raise RouterParseError('Cannot parse MAC address information')

    return converter.normalize_mac(match_object.group(1))
示例#11
0
def _parse_mac_address(html):
    match_object = re.compile("dw\(MACAddress\)(?:.+?)table2(?:.+?)>&nbsp;(.+?)\s", re.DOTALL).search(html)
    if match_object is None:
        raise RouterParseError('Cannot determine mac address')

    mac = match_object.group(1).strip(" ")
    if not validator.is_valid_mac_address(mac):
        raise RouterParseError('Found an invalid MAC address: %s' % mac)

    return converter.normalize_mac(mac)
示例#12
0
def _parse_mac_address(html):
    match_object = re.compile("dw\(MACAddress\)(?:.+?)table2(?:.+?)>&nbsp;(.+?)\s", re.DOTALL).search(html)
    if match_object is None:
        raise RouterParseError('Cannot determine mac address')

    mac = match_object.group(1).strip(" ")
    if not validator.is_valid_mac_address(mac):
        raise RouterParseError('Found an invalid MAC address: %s' % mac)

    return converter.normalize_mac(mac)
示例#13
0
def _parse_addr_reservations(html):
    regex = re.compile('name="smac[0-9]+" value="(.+?)"(?:.+?)name="sip[0-9]+" value="(.+?)">', re.DOTALL)

    reservation_list = DHCPReservationList()
    reservation_list.set_reboot_requirement_status(False)

    for mac, ip in regex.findall(html):
        item = DHCPReservationListItem()
        item.set_mac(converter.normalize_mac(mac))
        item.set_ip(ip)
        item.set_enabled_status(True)
        reservation_list.append(item)
    return reservation_list
示例#14
0
def _parse_addr_reservations(html):
    regex = re.compile('name="smac[0-9]+" value="(.+?)"(?:.+?)name="sip[0-9]+" value="(.+?)">', re.DOTALL)

    reservation_list = DHCPReservationList()
    reservation_list.set_reboot_requirement_status(False)

    for mac, ip in regex.findall(html):
        item = DHCPReservationListItem()
        item.set_mac(converter.normalize_mac(mac))
        item.set_ip(ip)
        item.set_enabled_status(True)
        reservation_list.append(item)
    return reservation_list
示例#15
0
def _parse_mac_address(contents):
    regex = "bssid_drv\[0\] ='((?:(?:[a-f0-9]{2}:){5})(?:[a-f0-9]{2}))';"
    regex_mac_address = re.compile(regex, re.DOTALL)

    match_object = regex_mac_address.search(contents)

    if match_object is None:
        raise RouterParseError("Cannot _parse mac address from contents")

    mac = match_object.group(1).strip(" ")
    if not validator.is_valid_mac_address(mac):
        raise RouterParseError("Found an invalid MAC address: %s" % mac)

    return converter.normalize_mac(mac)
示例#16
0
def _parse_mac_address(contents):
    regex = "bssid_drv\[0\] ='((?:(?:[a-f0-9]{2}:){5})(?:[a-f0-9]{2}))';"
    regex_mac_address = re.compile(regex, re.DOTALL)

    match_object = regex_mac_address.search(contents)

    if match_object is None:
        raise RouterParseError("Cannot _parse mac address from contents")

    mac = match_object.group(1).strip(" ")
    if not validator.is_valid_mac_address(mac):
        raise RouterParseError("Found an invalid MAC address: %s" % mac)

    return converter.normalize_mac(mac)
示例#17
0
def _parse_connected_clients_list(html):
    lst = ConnectedClientsList()

    regex = re.compile('<tr bgcolor=#(?:.+?)><td><font size=2>(.+?)</td>'
                       '<td><font size=2>(.+?)</td>'
                       '<td><font size=2>([0-9]+)</td></tr>')
    for i, (ip, mac, time) in enumerate(regex.findall(html)):
        item = ConnectedClientsListItem()
        item.set_client_name('Client %d' % (i + 1))
        item.set_ip(ip)
        item.set_mac(converter.normalize_mac(mac))
        item.set_lease_time(int(time))
        lst.append(item)
    return lst
示例#18
0
文件: w268r.py 项目: wblyy/roscraco
def _parse_addr_reservation_list(html):
    reservations = re.compile('var StaticList = new Array\((.*)\);').search(html)
    if reservations is None:
        raise RouterParseError('Cannot find reservations list.')
    reservations_list = reservations.group(1)

    results = re.compile(';(.+?);(.+?);([12]);(\d+)').findall(reservations_list)
    reservation_list = DHCPReservationList()
    reservation_list.set_reboot_requirement_status(False)
    for ip, mac, mac_bind, _time in results:
        item = DHCPReservationListItem()
        item.set_mac(converter.normalize_mac(mac))
        item.set_ip(ip)
        item.set_enabled_status(mac_bind == '1')
        reservation_list.append(item)
    return reservation_list
示例#19
0
文件: base.py 项目: ikresoft/roscraco
def _parse_addr_reservation_list(contents):
    array_name = 'dhcpList'

    result = _extract_js_array_data(contents, array_name)
    result = result[:-2]    # the last 2 elements are not needed

    # each 3 subsequent items are related (mac_address, ip, is_enabled)
    list_raw = split_in_groups(result, 3)

    reservation_list = DHCPReservationList()
    for mac, ip, is_enabled in list_raw:
        item = DHCPReservationListItem()
        item.set_mac(converter.normalize_mac(mac))
        item.set_ip(ip)
        item.set_enabled_status(is_enabled == 1)
        reservation_list.append(item)

    return reservation_list
示例#20
0
def _parse_addr_reservation_list(contents):
    array_name = 'dhcpList'

    result = _extract_js_array_data(contents, array_name)
    result = result[:-2]    # the last 2 elements are not needed

    # each 3 subsequent items are related (mac_address, ip, is_enabled)
    list_raw = split_in_groups(result, 3)

    reservation_list = DHCPReservationList()
    for mac, ip, is_enabled in list_raw:
        item = DHCPReservationListItem()
        item.set_mac(converter.normalize_mac(mac))
        item.set_ip(ip)
        item.set_enabled_status(is_enabled == 1)
        reservation_list.append(item)

    return reservation_list
示例#21
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
示例#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
示例#23
0
文件: w268r.py 项目: wblyy/roscraco
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
示例#24
0
文件: base.py 项目: ikresoft/roscraco
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
示例#25
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
示例#26
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
示例#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
示例#28
0
def parse_mac_address(html):
    regex = re.compile('NAME=_En VALUE="(.+?)"')
    match_object = regex.search(html)
    if match_object is None:
        raise RouterParseError("Cannot parse mac address")
    return converter.normalize_mac(match_object.group(1))
示例#29
0
def parse_mac_address(html):
    regex = re.compile('NAME=_En VALUE="(.+?)"')
    match_object = regex.search(html)
    if match_object is None:
        raise RouterParseError('Cannot parse mac address')
    return converter.normalize_mac(match_object.group(1))
示例#30
0
文件: v1_23.py 项目: cyroxx/roscraco
def _parse_mac_address(status_js):
    nvram = _parse_js_structure(status_js, 'nvram')
    try:
        return converter.normalize_mac(nvram['wan_hwaddr'])
    except KeyError:
        raise RouterParseError('Cannot parse MAC address!')
示例#31
0
文件: dhcp.py 项目: wblyy/roscraco
 def set_mac(self, value):
     self._mac_address = converter.normalize_mac(value)
示例#32
0
文件: w268r.py 项目: wblyy/roscraco
def _parse_mac_address(html):
    match_obj = re.compile('wan_mac="(.+?)";').search(html)
    if match_obj is None:
        raise RouterParseError('Cannot determine WAN mac address')
    return converter.normalize_mac(match_obj.group(1))
示例#33
0
def _parse_mac_address(status_js):
    nvram = _parse_js_structure(status_js, 'nvram')
    try:
        return converter.normalize_mac(nvram['wan_hwaddr'])
    except KeyError:
        raise RouterParseError('Cannot parse MAC address!')
示例#34
0
def _parse_mac_address(data_array):
    try:
        return converter.normalize_mac(data_array[1])
    except IndexError, e:
        raise RouterParseError('Cannot access the array index: %s' % repr(e))
示例#35
0
文件: dhcp.py 项目: cyroxx/roscraco
 def set_mac(self, value):
     self._mac_address = converter.normalize_mac(value)
示例#36
0
文件: base.py 项目: ikresoft/roscraco
def _parse_mac_address(data_array):
    try:
        return converter.normalize_mac(data_array[1])
    except IndexError as e:
        raise RouterParseError('Cannot access the array index: %s' % repr(e))