在Lua中ping一个服务器。

我很好奇是否有一种使用 Lua 的方式可以在不使用 os.execute 的情况下 ping 服务器。目的是为了查看服务器是否正常运行。

我检查了 Lua sockets 库,但我不认为支持 ICMP?有什么想法吗?

原文链接 https://stackoverflow.com/questions/8850831

点赞
stackoverflow用户596285
stackoverflow用户596285

据我所知,没有,如果没有 root 权限,则无法发送 ICMP 原始数据包。这不是 Lua 的限制,而是操作系统的限制。

要获得 root 访问权限,最好的方法是拥有一个小的经过充分测试的程序,该程序具有 SUID root 而不是更改您的整个应用程序与 Lua 为 SUID root。这意味着您最终将使用 os.execute()。而且,比起撰写自己的程序,操作系统提供的 ping 命令似乎是解决您的问题的不错选择。

我同意这不是理想的(特别是因为这会创建特定于操作系统的代码以处理各种 ping 命令)。但是如果没有 SUID 函数调用,我认为没有更好的方法。

2012-01-14 13:06:52
stackoverflow用户5644356
stackoverflow用户5644356

你可以使用 io.popen() 来执行 ping 命令。 例如,

local handler = io.popen("ping -c 3 -i 0.5 10.10.10.10")
local response = handler:read("*a")
print(response)
2017-07-11 18:29:51