美文网首页
Python获取FW150R无线路由器的客户端列表

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

作者: Pydes | 来源:发表于2020-05-08 01:25 被阅读0次

[toc]

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

目标

  • 使用Python代码获取FW150R无线路由器的客户端列表, 为定时检测新加接入的客户端作准备

原因

  • 无聊, 顺便熟悉下Python的相关模块
  • 其它方式获取无线路由下的客户端设备名称存在局限性(如 nmap, angryip等扫描方式),而路由则是基于DHCP的,相对便捷。

预备

  • FW150R无线路由器 (比较旧,属于基本能用的类型)
  • VIM (用于编辑Python脚本)
  • Chrome (浏览器)
  • Python3
  • requests (用于发起请求)
  • bs4 (用于解析html)
  • js2py (用于解析JS)

分析

  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'
}]

约束

  • 只对FW150R无线路由有效,其它设备需要具体问题具体分析
    (如360安全路由会在登录前对密码进行加密,则需要通过解析或直接调用它的js对密码明文进行处理后,再发送,同时请求的链接地址和需要解析的内容也不同。)

扩展

  • 如不是太在意获取客户端名, python-nmap 模块就足够扫描局域网里的存活主机。

相关文章

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

    [toc] Python获取FW150R无线路由器的客户端列表 目标 使用Python代码获取FW150R无线路由...

  • Python实现微信红包提醒(一)

    Python实现获取微信好友列表信息 安装Python第三方库 登录微信 获取微信好友的列表: Python实现微...

  • getScanResults返回0的原因

    前段时间做了一个需求就是获取附近wifi的列表,但是获取到的无线列表一直是0,但是周围有很多的无线网,觉得奇怪,下...

  • 斐讯K3C 第三方固件教程

    Telnet激活工具(无线/网线连接) 路由器接通电源,完成初始化,可正常获取IP地址。 当路由器指示由红灯变为黄...

  • 如何实现无线路由器信号增强

    如何实现无线路由器信号增强 如何实现无线路由器信号增强 本文将为大家讲述如何实现无线网络WDS中继,让无线路由器信...

  • WIFI2.4G和5G的区别

    无线路由器的2.4g或者5g 是指无线路由器发出的信号是频段 一、2.4G无线路由器是使用IEEE802.11n无...

  • raspberrypi装系统后

    查看路由器dhcp列表,获取ip,使用scrt登录 修改/etc/apt/sources.list deb htt...

  • 如何利用多个无线路由器扩展wifi网络

    多台无线路由器、无线AP或无线路由器加无线AP,进行有线连接设备,使用同一SSID号上网架设配置方法,覆盖面较...

  • 路由器桥接

    路由器桥接的两种方式:无线桥接、有限桥接 一、无线桥接 说明:主、副路由器通过无线桥接,无线终端可以连接主、副路由...

  • 阿里云python sdk使用入门

    python sdk的安装 先从Python SDK列表获取产品对应的Python SDK名称,然后通过pip进行...

网友评论

      本文标题:Python获取FW150R无线路由器的客户端列表

      本文链接:https://www.haomeiwen.com/subject/jlotnhtx.html