zoukankan      html  css  js  c++  java
  • (1)

     详细入门教程https://gitee.com/pipicold/OpenwrtLuaController

    openwrt使用uci C API获取和修改wifi密码

    https://blog.csdn.net/qq_19004627/article/details/79641238

    我的openwrt学习笔记(二十八)webserver之lighttpd

    https://blog.csdn.net/xushx_bigbear/article/details/48379759

    https://github.com/grasses/OpenWRT-Util/blob/master/shell/aps.sh

    https://blog.csdn.net/hui523hui523hui523/article/details/38943693

    https://gitee.com/pipicold/OpenwrtLuaController

    config 'example' 'test' option 'string' 'some value' option 'boolean' '1' list 'collection' 'first item' list 'collection' 'second item' config 'example' 'test' 语句标志着一个节的开始。这里的配置类型是example,配置名是test。配置中也允许出现匿名节,即自定义了配置类型,而没有配置名的节。配置类型对应配置处理程序来说是十分重要的,因为配置程序需要根据这些信息来处理这些配置项。 option 'string' 'some value' 和 option 'boolean' '1' 定义了一些简单值。文本选项和布尔选项在语法上并没有差异。布尔选项中可以用'0' , 'no', 'off', 或者'false'来表示false值,或者也可以用'1', 'yes','on'或者'true'来表示真值。 以list关键字开头的多个行,可用于定义包含多个值的选项。所有共享一个名称的list语句,会组装形成一个值列表,列表中每个值出现的顺序,和它在配置文件中的顺序相同。如上例种中,列表的名称是'collection',它包含了两个值,即'first item'和'second item'。 'option'和'list'语句的缩进可以增加配置文件的可读性,但是在语法不是必须的。 通常不需要为标识符和值加引号,只有当值包括空格或者制表符的时候,才必须加引号。同时,在使用引号的时候,可以用双引号代替单引号。

    1什么是CGI 

    CGI(Common Gateway Interface)是HTTP服务器与你的或其它机器 
    上的程序进行“交谈”的一种工具,其程序须运行在网络服务器上。 

    公共网关界面(CGI)是一种编程标准,它规定了Web服务器调用其它可执行程序(CGI程序)的接口协议标准。CGI程序通过Web服务器与运行Web服务器调用其它可执行程序交互,它接受Web浏览器发送给Web服务器的信息,并进行处理,然后将结果再送给Web服务器及Web浏览器。CGI程序可以用任何程序设计语言编写,如Shell、perl、C、Java等,用C语言编写的CGI程序具有速度快、安全性高等特点。

    CGI程序通常用于加入查询机制、搜索机制、交互式应用及其它一些应用。                

    CGI接口标准包括输入、环境变量、标准输出三部分,CGI程序可以通过标准输入stdin)从Web服务器得到输入信息,例如从FORM中得到数据,这就是常用的POST方法。由于不同的操作系统采用了不同的信息交换机制,其参数传递的处理过程也有别,在Unix与DOS中,环境信息反映着本级程序运行时的某些系统状况,可用于父序与子程序间的信息传递,CGI正是通过设量环境变量在服务器与客户机间传递数据的,各操作系统都提供了许多环境变量,它们定义了程序的执行环境,应用程序可以存取它们。Web服务器和CGI接口也设置了一些环境变量用以传递一些重要的参数。CGI程序通过标准输出(stdout)将输出信息传送给Web服务器,传送给服务器的信息可以是HTML文本也可以是纯文本。

     本文将利用C语言编写一个CGI应用程序,并分析了CGI程序设计的方法、过程、技巧。 

    https://gitee.com/pipicold/OpenwrtLuaController

    ####UCI简介

    "uci"是"Unified Configuration Interface"(统一配置界面)的缩写,意在OpenWrt整个系统的配置集中化。

    系统配置应容易,更直接且在此有文档描述,从而使你的生活更轻松!

    (它是White Russian系列OpenWrt基于nvram的配置的后继改进。)

    许多程序在系统某处拥有自己的配置文件,

    比如/etc/network/interfaces, /etc/exports, /etc/dnsmasq.conf或者 /etc/samba/samba.conf,

    有时它们还使用稍有不同的语法。

    在OpenWrt中你无需为此烦恼,我们只需更改UCI配置文件!

    不需要为了某个更改起效而重启系统。

    ####查找设置并修改实例

    以修改wifi模块的ssid名称为例:

    首先使用

    uci export 

    命令,显示结果如下:

    package wireless
    
    config wifi-device 'radio0'
        option type 'mac80211'
        option hwmode '11ng'
        option path 'platform/ar933x_wmac'
        list ht_capab 'SHORT-GI-20'
        list ht_capab 'SHORT-GI-40'
        list ht_capab 'RX-STBC1'
        list ht_capab 'DSSS_CCK-40'
        option disabled '0'
        option channel 'auto'
        option htmode 'HT40+'
        option country 'CN'
        option noscan '1'
    
    config wifi-iface
        option device 'radio0'
        option network 'lan'
        option mode 'ap'
        option encryption 'none'
        option ssid 'OPENWRT'

    可以看到在“wireless”配置文件下有可以修改SSID的选项

    于是使用“uci show”命令输出具体的配置信息

    命令显示如下:

    wireless.radio0=wifi-device
    wireless.radio0.type=mac80211
    wireless.radio0.hwmode=11ng
    wireless.radio0.path=platform/ar933x_wmac
    wireless.radio0.ht_capab=SHORT-GI-20 SHORT-GI-40 RX-STBC1 DSSS_CCK-40
    wireless.radio0.disabled=0
    wireless.radio0.channel=auto
    wireless.radio0.htmode=HT40+
    wireless.radio0.country=CN
    wireless.radio0.noscan=1
    wireless.@wifi-iface[0]=wifi-iface
    wireless.@wifi-iface[0].device=radio0
    wireless.@wifi-iface[0].network=lan
    wireless.@wifi-iface[0].mode=ap
    wireless.@wifi-iface[0].encryption=none
    wireless.@wifi-iface[0].ssid=OPENWRT

    使用“uci set wireless.@wifi-iface[0].ssid=pipicoldnet”命令修改配置文件

    再输入“uci commit”命令提交所进行的修改

    最后,输入“wifi”命令,重新启动wifi服务

    这是再次用其他设备搜索空间中的wifi信号,能看到原来的SSID为“OPENWRT”的AP已经被修改为“pipicoldnet”

    (uci命令尝试)

    ####LuCI介绍

    LuCI作为“FFLuCI”诞生于2008年3月份,目的是为OpenWrt固件从 Whiterussian 到 Kamikaze实现快速配置接口。Lua是一个小巧的脚本语言,很容易嵌入其它语言。轻量级 LUA语言的官方版本只包括一个精简的核心和最基本的库。这使得LUA体积小、启动速度快,从而适合嵌入在别的程序里。UCI是OpenWrt中为实现所有系统配置的一个统一接口,英文名Unified Configuration Interface,即统一配置接口。LuCI,即是这两个项目的合体,可以实现路由的网页配置界面。

    最初开发这个项目的原因是没有一个应用于嵌入式的免费,干净,可扩展以及维护简单的网页用户界面接口。大部分相似的配置接口太依赖于大量的Shell脚本语言的应用,但是LuCi使用的是Lua编程语言,并将接口分为逻辑部分,如模板和视图。LuCI使用的是面向对象的库和模板,确保了高效的执行,轻量的安装体积,更快的执行速度以及最重要的一个特性————更好的可维护性。 与此同时,LuCI从MVC-Webframework衍生出一个包含了很多库、程序以及Lua程序用户接口的集合,但是LuCI仍然专注于实现网页用户界面并成为OpenWrt Kamikaze官方的一份子。 LuCI是一个开放源码的独立项目,欢迎任何人的加入。

    #####模块Lua脚本和Luci快速配置接口的测试

    #####Lua部分:

    ######1.lua解释器测试

    在任意路径下输入

    vim hellolua.lua

    新建一个Lua脚本文件hellolua.lua

    写入以下代码:

    print("hello lua");

    接着保存退出,在控制台上输入命令

    lua hellolua.lua

    就能在控制台上看到

    hello lua

    的输出,测试成功

    ######2.cgi解释lua文件测试

    cd /www/cgi-bin命令进入uhttpd的cgi-bin文件夹

    接着使用vim hellolua新建一个名为“hellolua”的文件,注意没有后缀名

    写入以下代码

    #!/usr/bin/lua
    print("hello lua")

    之后在控制台用chmod 777 hellolua命令修改“hellolua”文件的权限为最高

    接着用网页浏览器访问

    "192.168.1.1/cgi-bin/hellolua"

    返回错误信息

    Bad Gateway

    The process did not produce any response

    这是因为返回的消息没有http头消息导致了网页不能被浏览器正确的解析

    修改代码如下:

    #!/usr/bin/lua
    print("Context-Type: test/plain
    ")
    print("hello lua")

    保存后刷新网页.就可以看到网页上显示:

    hello lua

    测试成功。

    ######3.使用CGI环境变量

    WEB 服务器和 CGI/FastCGI 程序之间交流信息的主要途径是环境变量 (以及标准输入输出流)

    CGI环境变量列表:

    【table】

    环境变量 意义

    SERVER_NAME CGI脚本运行时的主机名和IP地址.

    SERVER_SOFTWARE 你的服务器的类型如: CERN/3.0 或 NCSA/1.3.

    GATEWAY_INTERFACE 运行的CGI版本. 对于UNIX服务器, 这是CGI/1.1.

    SERVER_PROTOCOL 服务器运行的HTTP协议. 这里当是HTTP/1.0.

    SERVER_PORT 服务器运行的TCP口,通常Web服务器是80.

    REQUEST_METHOD POST 或 GET, 取决于你的表单是怎样递交的.

    HTTP_ACCEPT 浏览器能直接接收的Content-types, 可以有HTTP Accept header定义.

    HTTP_USER_AGENT 递交表单的浏览器的名称、版本 和其他平台性的附加信息。

    HTTP_REFERER 递交表单的文本的 URL,不是所有的浏览器都发出这个信息,不要依赖它

    PATH_INFO 附加的路径信息, 由浏览器通过GET方法发出.

    PATH_TRANSLATED 在PATH_INFO中系统规定的路径信息.

    SCRIPT_NAME 指向这个CGI脚本的路径, 是在URL中显示的(如, /cgi-bin/thescript).

    QUERY_STRING 脚本参数或者表单输入项(如果是用GET递交). QUERY_STRING 包含URL中问号后面的参数.

    REMOTE_HOST 递交脚本的主机名,这个值不能被设置.

    REMOTE_ADDR 递交脚本的主机IP地址.

    REMOTE_USER 递交脚本的用户名. 如果服务器的authentication被激活,这个值可以设置。

    REMOTE_IDENT 如果Web服务器是在ident (一种确认用户连接你的协议)运行, 递交表单的系统也在运行ident, 这个变量就含有ident返回值.

    CONTENT_TYPE 如果表单是用POST递交, 这个值将是 application/x-www-form-urlencoded. 在上载文件的表单中, content-type 是个 multipart/form-data.

    CONTENT_LENGTH 对于用POST递交的表单, 标准输入口的字节数.

    通过查询Lua参考手册,得知Lua调用环境变量的函数为:

    os.getenv(string) --string为环境变量的名称

    让我们来继续测试,仍然在/www/cgi-bin路径下,使用命令

    vim hellowlua

    修改为

    #!/usr/bin/lua
    print("Context-Type: text/plain
    ")  
    print("your IP is "..os.getenv("REMOTE_ADDR"))
    print("your querry is: "..os.getenv("QUERY_STRING"))

    使用浏览器使用GET方法访问地址:

    192.168.1.1/cgi-bin/hellolua?abc=123

    页面将显示:

    your IP is 192.168.1.102 your querry is: abc=123

    如果需要调用模块上已经有的程序,可以通过以下Lua代码实现:

    os.execute(string) --string为要执行的语句

    如果要调用模块上的设备,需要使用Lua的IO读写相关函数

    例如在模块“ttyATH0” 串口上输出字符串“test1”的代码:

    io.output("/dev/ttyATH0");
    io.write("test1");

    至此,模块Lua脚本的部分测试结束

    ####LuCI部分

    #####Luci程序的位置

    Luci的入口就在/www/cgi-bin/下的luci文件

    但是它的主程序在/usr/lib/lua/luci中

  • 相关阅读:
    idea存在包但是运行项目一直报java.lang.NoClassDefFoundError的问题
    记录一次服务器大中间表优化的问题(数据倾斜的解决)
    CDH spark2切换成anaconda3的问题
    关于(我们流量表优化),分区表数据块过多,聚合又导致数据倾斜问题
    大数据(流量表)任务问题清洗生成新分区表过程
    spark2.0在IDE运行的问题
    位运算应用
    SPSS数据的图表
    SPSS数据输入
    箭头函数中的this
  • 原文地址:https://www.cnblogs.com/kekeoutlook/p/10781414.html
Copyright © 2011-2022 走看看