校园网&openwrt记(四)Lua发送udp包

  由于openwrt的web管理界面luci的后台完全由Lua写的,标准的Lua库是不足以完成这个任务的,需要扩展其他库来完成,所以openwrt的Lua的目标目录下(一般为/usr/lib/lua)会有一个nixio.so动态链接库,许多扩展可以从该库。鉴于Lua脚本可以很容易的被C/C++ 代码调用,也可以反过来调用C/C++的函数,这使得Lua在应用程序中可以被广泛应用。
  nixio中有许多扩展的方法,其中有bit库,socket库,TLS库,crypto库,File库等等。详情可以看luci在github上的wiki关于nixio的API当然最好是git clone下来好好看一下源码。
  本应用要使用socket,从nixio中导出socket是一种方法,还有一种方法是用opkg包管理工具安装luasocket扩展包,这个扩展包比nixio的socket更为丰富,也更大。
  我这里只是简单发送udp包,并且想尽可能的保留路由上有限的存储,所以使用前者:

socket = require "nixio".socket       --返回的socket是一个生成Socket类的构造函数

这时就可以用socket函数来生成socket实例了:

sock = socket("inet", "dgram")             --UDP
tcp_sock = socket("inet", "stream")        --TCP

然后可以可选地使用setopt成员函数去设置socket的option,这里简单地设置其可重用SO_REUSEADDR为true和接收超时为3s:

sock:setopt("socket", "reuseaddr", 1)
sock:setopt("socket", "rcvtimeo", 3)

发送udp包可以使用sentto:

sock:sendto("Hello world!", "8.8.8.8", 12345)  --返回发送的字节数

接收可以使用recvfrom:

msg, _, _ = sock:recvfrom(5)  --返回1.接收的数据;2.发送方的ip;3.发送方的端口

其他更多的操作详见luci在github上的document。
  至此,整个应用所需要的网络支持都已经具备,只需要构造好UDP包,就可以发送到校园服务器,获取拨号权限了。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值