【发布时间】:2011-07-20 11:45:37
【问题描述】:
我有一个 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
问题好像是socket只能接收一定数量的字节,然后返回。套接字是一个全局变量,因为我不想为每个“blah”实例打开一个新套接字。有什么办法可以让套接字等待接收所有数据(例如,直到字符串为空终止)然后打印数据??
更新 我一直在尝试不同的方法将大小参数传递给接收方法,如下所述: http://w3.impa.br/~diego/software/luasocket/tcp.html 然而,这些似乎没有任何效果,例如。
response,data = socket:receive(65536)
response,data = socket:receive('a*')
【问题讨论】:
标签: sockets lua truncation