Python获取FW150R无线路由器的客户端列表

2020-05-08  本文已影响0人  Pydes

[toc]

Python获取FW150R无线路由器的客户端列表

目标

原因

预备

分析

  1. 通过Chrome浏览器登录FW150R无线路由

(默认无线路由器管理界面地址: http://192.168.0.1, 默认账号密码 admin/admin , 以实际为准)

  1. 在无线路由器管理界面左边菜单栏选择DHCP服务器,选择客户端列表,切换到客户端列表页面
  2. 打开Chrome菜单,选择更多工具,选择开发者工具
  3. 在开发者工具页面,选择 Network
  4. 点击客户端列表刷新按钮,并查看开发者工具出现的链接地址
  5. 确定获取客户端列表的请求

(http://192.168.0.1/userRpm/AssignedIpAddrListRpm.htm)

  1. 在 Network 页面选择 获取客户端列表的请求, 查看 Response 内容
  2. 分析返回响应内容可知, 页面由javascript与html组成, 在页面第一段 javascript 定义了 DHCPDynList的数组对象, 第二段 javascript 定义的数组格式, 最后通过 javascript 重写的页面显示表格, 生成了最终显示的页面内容。

实现


#!/usr/bin/env python3
#coding: utf8

## TODO: 导入模块
import requests
from bs4 import BeautifulSoup
import js2py

## TODO: 配置信息 
''' 定义无线路由器登录账号, 密码 '''
router_login = ('admin', 'admin')
''' 定义获取客户端列表的请求地址 '''
router_url = 'http://192.168.0.1/userRpm/AssignedIpAddrListRpm.htm'

## TODO: 获取客户端列表请求响应内容
get_response_action = requests.get(router_url, auth=router_login).text

## TODO: 创建 bs 对象
soup = BeautifulSoup(get_response_action, 'html.parser')

## TODO: 获取匹配 script 的内容, 根据页面内容选择第一段 script 的内容
js1 = soup.find_all("script", {'type': 'text/javascript'})[0]

## TODO: 解析第一段 javascript 的内容, 并只提供客户端列表信息
dhcpdynlist = list(js2py.eval_js(js1.string))[0:-2]

## TODO: 格式化显示的内容
'''dhcpdynlist类型为一维列表, 每四个位置表示一组客户端信息,包括(客户端名,MAC地址, IP地址, 有效时间), 所以这里进行格式化显示'''
dhcpdynlistf = [{'name': dhcpdynlist[i], 'mac': dhcpdynlist[i+1], 'ip': dhcpdynlist[i+2], 'time': dhcpdynlist[i+3]} for i in range(0, len(dhcpdynlist), 4)]

## TODO: 打印结果 
print(dhcpdynlistf)

输出


[{
    'name': 'PC2020',
    'mac': 'xx-xx-xx-xx-xx-xx',
    'ip': '192.168.0.100',
    'time': '01:41:00'
}, {
    'name': 'RedmiNote7',
    'mac': 'xx-xx-xx-xx-xx-xx',
    'ip': '192.168.0.101',
    'time': '01:43:43'
}, {
    'name': 'MI4LTE',
    'mac': 'xx-xx-xx-xx-xx-xx',
    'ip': '192.168.0.104',
    'time': '01:07:18'
}]

约束

扩展

上一篇 下一篇

猜你喜欢

热点阅读