我有一个 Lua 脚本,它使用 NSE(nmap 脚本引擎)递归地发送命令并通过套接字连接接收数据。它似乎通常工作,直到它得到一个大字符串,然后它倾向于截断接收到的数据。在发送下一个命令时,截断后的数据(应该在前一个命令中接收到)通过(最终是正确的数据)。下面的简化示例输出。注意“data38”被截断并在命令的下一个实例中继续:
"send command1"
"recieved data ="
data1
data2
data3
....
....
....
data37
da
**returning**
"send command2"
"received data ="
ta38 (should be from command1)
data39 (should be from command1)
etc etc etc
示例代码如下:
local function blah(id)
local response
local data
local commmand
command = "dir..id"
socket:send(command)
response,data = socket:receive()
print(data)
--do recursion her depending on data results.
print "**returning**"
return
action = function(host,port)
socket = nmap.new_socket()
socket:connect(host,port)
socket:set_timeout(15000)
test = blah(id)
return test
问题似乎是套接字只能接收一定数量的字节,然后返回。套接字是一个全局变量,因为我不想为每个“blah”实例打开一个新套接字。有什么办法可以让套接字等待接收所有数据(例如,直到字符串为空终止)然后打印数据?
更新 我一直在尝试不同的方法将大小参数传递给接收方法,如: http ://w3.impa.br/~diego/software/luasocket/tcp.html 但是这些似乎没有任何效果,例如.
response,data = socket:receive(65536)
response,data = socket:receive('a*')