У меня есть скрипт 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 - это глобальная переменная, так как я не хочу открывать новый сокет для каждого экземпляра «бла».Есть ли способ заставить сокет ждать получения всех данных (например, до тех пор, пока строка не завершится нулем), а затем распечатать данные ??
Обновление Я пробовал разныеподходы для передачи параметра размера в метод приема, как указано в: http://w3.impa.br/~diego/software/luasocket/tcp.html Однако, похоже, они не имеют никакого эффекта, например.
response,data = socket:receive(65536)
response,data = socket:receive('a*')