需要在 Lua 脚本中使用 ping 命令验证/检查 IPv6 地址

我对 Lua 脚本不熟悉,但需要一些帮助。 基本上,当前的 Lua 脚本将接收一个结构。 在此结构中,有一个地址参数,其中将获取两个索引参数(IPv6 和 IPv4)地址。

Lua 脚本需要实现以下情况

  1. ping ipv6 地址,并将结果存储在本地变量中。 如果本地变量获取到(ping 成功),将连接/调用通过的 IPv6 地址的 uv.tcp_connect。 否则,我将检查 IPv4 地址,尝试连接/调用 uv.tcp_connect。
点赞
用户11740758
用户11740758

为了存储系统命令的输出,我建议使用 io.popen()

以下是一个条件式 ping 的例子,它首先尝试使用 IPv6,如果失败则使用 IPv4...

> code.cmd
-- cmd(shell)
return function(shell)
return io.popen(shell, 'r'):read('a+')
end
> results={}
> results.ping=load(code.cmd)()('ping -q -c1 -6 localhost 2>&1 >/dev/null && printf "IPv6: true" || (ping -q -c1 localhost 2>&1 >/dev/null && printf "IPv4 true" || printf "false")')
> print(results.ping)
IPv6: true

...在 Lua 控制台中输入。

EDIT enter image description here 在线 Lua 环境不支持上述代码!

2021-08-06 11:39:04
用户16606876
用户16606876

我正在使用在线 Lua 编辑器,它返回 nil。

local results = load('ping -q -c1 -6 localhost 2>&1 >/dev/null && printf "IPv6: true" || (ping -q -c1 www.google.com 2>&1 >/dev/null && printf "IPv4 true" || printf "false")')
print(results)

输出为: nil

并且

如果我在 Lua 在线编辑器中使用...

local handler = io.popen("ping -c 3 -i 0.5 www.google.com")-- 错误在这里
local response = handler:read("*a")
print(response)

输出错误: lua: main.lua:3: expected near '"ping -c 3 -i 0.5 www.google.com"'

请帮我建议,我是否漏掉了上面的某些东西。

2021-08-06 12:26:56