openwrt--luci学习记录3 登录页面分析

时间:2024-03-15 17:04:46

 

 

以前做的笔记,没有上传,现发上来,供学习使用

Http 以及html相关知识的介绍

HTTP是一个客户端终端(用户)和服务器端(网站)请求和应答的标准(TCP)。通过使用网页浏览器,客户端发起一个HTTP请求到服务器上指定端口(默认端口为80),通常由HTTP客户端发起一个请求,创建一个到服务器指定端口(默认是80端口)的TCP连接。HTTP服务器则在那个端口监听客户端的请求。一旦收到请求,服务器会向客户端返回一个状态,比如"HTTP/1.1 200 OK",以及返回的内容,如请求的文件、错误消息、或者其它信息。

客户端向服务器发送一个请求报文,请求报文包含请求的方法、URL、协议版本、请求头部和请求数据。服务器以一个状态行作为响应,响应的内容包括协议的版本、成功或者错误代码、服务器信息、响应头部和响应数据。

以下是 HTTP 请求/响应的步骤:

 客户端连接到Web服务器

 发送HTTP请求

 服务器接受请求并返回HTTP响应

 释放连接TCP连接

客户端浏览器解析HTML内容

get  post  head  post  put  delete  trace  options  connect

URL

openwrt--luci学习记录3 登录页面分析

 

HTTP状态码

openwrt--luci学习记录3 登录页面分析

 

  • HTTP请求格式(请求协议)

openwrt--luci学习记录3 登录页面分析

 

openwrt--luci学习记录3 登录页面分析

 

openwrt--luci学习记录3 登录页面分析

 

https://www.runoob.com/html/html-intro.html

  1. HTML页面使用“<% %>”嵌入 LUA 代码,在HTML页面的开头会发现有一段“<% %>”的引用,那里包含着LUA的数据处理;
  2. 可以在HTML的任何地方,使用<%=xxx%>进行LUA数据的引用;
  3. HTML页面里的<%+header%>表示加载/usr/lib/lua/luci/view/header.htm;
  4. 使用<%:xxx%>,实现页面节点不同语言风格的切换
  5. cbi的跳转方式(跳转LUA页面):

local http = require 'luci.http'

local dsp = require 'luci.dispatcher'

http.redirect(dsp.build_url("/admin/system/wifitest"))

  1. template的跳转方式(跳转HTML页面):

local temp = require 'luci.template'

temp.render("sysauth")

 

服务器架构

main函数进行一些初始化(首先parse config-file,然后parse argv),然后进入一个循环,不断地监听,每当有一个客户请求到达时,则对它进行处理。

openwrt--luci学习记录3 登录页面分析

uh_cgi_request需要两个二外的参数pathinfo和interpreter,其中pin是一个struct,包含了路径中各种有用信息;ipr指明所用的cgi程序,因为一个服务器中可以有多个cgi程序。

openwrt--luci学习记录3 登录页面分析

    如图所示,docroot是服务器的资源目录,是为了os准确定位资源位置,由uhttpd的config文件设定,如openwrt中为/www。后面的是client传来的url,开头的为cgi-prefix,也是有uhttpd的config文件设定的,它指明serv端采用cgi处理方式,如openwrt中的为/www/cgi-bin;紧接着的是cgi的程序名,它指明了使用哪个cgi程序;再后面就是实际的path信息了,在cgi方式中,它会被当成参数供cgi程序使用

uhttp的配置文件 位于 /etc/config  目录下

openwrt--luci学习记录3 登录页面分析

uhttp 的启动脚本 位于  /etc/init.d中

openwrt--luci学习记录3 登录页面分析

…….

openwrt--luci学习记录3 登录页面分析

在系统的根目录/  下的www文件夹下

openwrt--luci学习记录3 登录页面分析

openwrt--luci学习记录3 登录页面分析

 

http请求的主页面,默认是/www/index.html,这个文件里显示了登录时常看见的那句话“LuCI - Lua Configuration Interface”,同时也指定了href链接/cgi-bin/luci

openwrt--luci学习记录3 登录页面分析

加载当前的目录的/cgi-bin/luci 这个脚本文件,脚本文件内容

openwrt--luci学习记录3 登录页面分析

run()函数作为CGI程序的启动入口

  openwrt--luci学习记录3 登录页面分析

在上述run()函数中,创建了一个协同程序,调用httpdispatch()函数,而这个函数位于dispatcher.lua中。

对index的页面源码的解析,了解相应的html的语法,这个页面主要作用是超链接

文件位于\lua\luci\view\indexer

openwrt--luci学习记录3 登录页面分析

页面效果

openwrt--luci学习记录3 登录页面分析

对sysauth 页面进行解析,文件位于\lua\luci\view\sysauth

主要是将username和password按照表单的形式,进行提交。

其中需要对LuCI中的CBI模板进行学习。

openwrt--luci学习记录3 登录页面分析

对应的页面效果

 openwrt--luci学习记录3 登录页面分析

通过网页进行截获信息

openwrt--luci学习记录3 登录页面分析

相应的后台处理函数为\lua\luci\dispatcher

openwrt--luci学习记录3 登录页面分析

dispatch 负责处理http中参数

 

openwrt--luci学习记录3 登录页面分析

上文中返回失败的返回

openwrt--luci学习记录3 登录页面分析

ps 中可以显示相应的进程

usr/sbin/uhttpd -f -h /www -r AOTUO -x /cgi-bin -u /ubus -t 60 -T 30 -k 20 -A 1 -n 3 -N 100 -R -p 0.0.0.0:80 -p [::]:80