网卡模式下获取Air720的运行状态

不改内核,不走AT,通过模拟浏览器访问的方式,用代码的获取Air720的状态信息(例如信号强度和iccid ), 详解模拟过程并提供实例代码

背景

  1. 需要获取联网状态,设备识别号(IMEI),ICCID,重启设备
  2. 通过AT可以获取网络状态,SIM的ICCID
  3. linux下需要修改内核驱动才能出AT口

效果预览

获取信息

  1. {
  2. "sysinfo": {
  3. "hardware_version": "NZ_SSG_V20",
  4. "device_name": "MIFI",
  5. "version_num": "NZ_NZ_CP_2.174.000X",
  6. "version_date": "Oct 6 2018",
  7. "model_name": "LV01",
  8. "main_chip_name": "PXA1802",
  9. "ssg_version": "LV01MVL01",
  10. "ssg_compile_time": "Oct 6 2018 10:38:24",
  11. "current_device_mac": "ac:3d:d3:d5:6d:af"
  12. },
  13. "wan": {
  14. // ...
  15. "IMEI": "869300038716XXX"
  16. // ...
  17. }
  18. //... 剩下的省略
  19. }

突破口

  1. 设备自带一个网页管理工具
  2. 该工具需要登录,基于变种的Digest realm登录验证
  3. 网页是通过ajax访问/xml_action.cgi读取和操作设备
  4. 必须先完成一次登录,才能通过普通的Digest realm机制访问xml_action

操作流程

  1. 1. 访问/login.cgi,服务器返回header WWW-Authenticate
  2. 2. 解析WWW-Authenticate,得到nonce
  3. 3. 先使用uri=/cgi/protected.cgi生成签名,作为url参数. 这点非常重要
  4. 4. 再使用uri=/cgi/xml_action.cgi生成普通的Digest realm签名,放入header
  5. 5. 使用上两步的参数和签名,访问/login.cgi, 服务器返回200代表登录成功,500代表失败
  6. 6. 使用普通Digest realm签名,访问/xml_action.cgi, 可以读取和操作设备

Digest realm签名算法简介

https://zh.wikipedia.org/wiki/HTTP%E6%91%98%E8%A6%81%E8%AE%A4%E8%AF%81

  1. HA1 = md5_hex(username:realm:password)
  2. HA2 = md5_hex(method:uri) // method是GET/POST/PUT等, uri是/cgi/protected.cgi(仅登录)或/xml_action.cgi
  3. // 其中nonce是访问/login.cgi时获取的
  4. // nonceCount是16进制自增数列,login总是1,后续请求逐次+1
  5. // clientNonce是客户端随机字符串,长度12字节,数字+字母就行
  6. // qop总是auth
  7. RE = md5_hex(HA1:nonce:nonceCount:clientNonce:qop:HA2)

演示代码

基于Java的示例代码,2018-10-06的AT固件验证有效
https://gitee.com/wendal/Air720Master

附上部分可以操作

module总是duster,还没发现例外

  1. // http://192.168.0.1/xml_action.cgi?method=get&module=duster&file=status1
  2. // 全部状态? status1
  3. // 流量信息 statistics
  4. // 上网配置 wan
  5. // 局域网配置 lan
  6. // PIN/PUK设置 pin_puk
  7. // USSD设置 ussd
  8. // 联网设备 device_management_all
  9. // 设备统计 device_management
  10. // 日志 detailed_log
  11. // 自定义防火墙 custom_fw
  12. // 端口过滤 port_filter
  13. // 端口转发 port_forwarding
  14. // 电话本 phonebook
  15. // 短信 message
  16. // 管理员配置 admin
  17. // 固件版本 firmware
  18. // 重启 reset
  • 发表于 2018-10-09 11:33
  • 阅读 ( 4387 )
  • 分类:默认分类

0 条评论

请先 登录 后评论
不写代码的码农
技术销售Wendal

软件工程师

15 篇文章

作家榜 »

  1. 技术销售Delectate 43 文章
  2. 陈夏 26 文章
  3. 国梁 24 文章
  4. miuser 21 文章
  5. 晨旭 20 文章
  6. 朱天华 19 文章
  7. 金艺 19 文章
  8. 杨奉武 18 文章