我可以使用Lua“套接字”库找出端口的状态吗?

时间:2017-09-04 09:19:28

标签: sockets lua

帮助我跟踪特定端口的状态:“LISTENING”,“CLOSE_WAIT”,“ESTABLISHED”。 我有一个使用netstat命令的模拟解决方案:

local command = 'netstat -anp tcp | find ":1926 " '
local h = io.popen(command,"rb")
local result = h:read("*a")
h:close()
print(result)
if result:find("ESTABLISHED") then
   print("Ok")
end

但我需要对Lua socket library做同样的事情。 有可能吗?

2 个答案:

答案 0 :(得分:1)

您无法使用套接字API查询另一个进程拥有的套接字的状态,这是LuaSocket使用的内容。

要访问有关其他进程的信息,您需要查询操作系统。假设您使用的是Linux,这通常意味着查看proc文件系统。

我对Lua并不是很熟悉,但是一个快速的Google给了我这个项目:https://github.com/Wiladams/lj2procfs。我想这可能就是你需要的,假设他们为你需要的相关/proc/net文件编写了一个解码器。

哪个档案?如果只是状态,我认为您需要http://www.onlamp.com/pub/a/linux/2000/11/16/LinuxAdmin.html

中涵盖的tcp文件

答案 1 :(得分:1)

就像@Peter所说,netstat使用proc文件系统来收集网络信息,特别是端口绑定。 LuaSockets有自己的库来检索连接信息。例如,

<强> 听力 您可以使用master:listen(backlog)指定套接字愿意接收连接,将对象转换为服务器对象。服务器对象支持accept,getsockname,setoption,settimeout和close方法。参数backlog指定可以排队等待服务的客户端连接数。如果队列已满并且另一个客户端尝试连接,则拒绝连接。如果成功,该方法返回1.如果出现错误,该方法返回nil,后跟一条错误消息。

以下方法将返回包含本地IP地址的字符串和带有端口的数字。如果出现错误,该方法将返回nil。

master:getsockname()
client:getsockname()
server:getsockname()

还有这种方法: client:getpeername()这将返回一个字符串,其中包含对等体的IP地址,后跟对等体用于连接的端口编号。如果出现错误,该方法将返回nil。

对于“CLOSE_WAIT”,“ESTABLISHED”或您要检索的其他连接信息,请阅读Official Documentation。它提供了您需要的一切,并简明扼要地解释了方法。