2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Можно ли скачивать файлы с помощью сокетов Nmap?
Сообщение17.06.2020, 03:55 
Заслуженный участник


31/12/15
936
Пытаюсь (для опыта) скачать фотографию по ftp с помощью nmap (библиотека nse ftp). Пишу маленький скрипт на lua, создаю сокет, посылаю запрос "скачать", скачивает кусочек размером 1.42 кб, никаких ошибок не выдаёт. Для гарантии скачиваю ту же фотографию браузером и смотрю (с помощью Wireshark), какие ftp-запросы посылает браузер. Посылаю сам те же запросы, всё идёт хорошо до скачивания, но не скачивает.

 Профиль  
                  
 
 Re: Можно ли скачивать файлы с помощью сокетов Nmap?
Сообщение17.06.2020, 11:28 


09/05/16
138
Покажите, пожалуйста, код. По симптомам можно только предположить, что программа преждевременно выходит из цикла скачивания. Вы вдохновляетесь существующими скриптами или пишете с нуля?

 Профиль  
                  
 
 Re: Можно ли скачивать файлы с помощью сокетов Nmap?
Сообщение17.06.2020, 13:22 
Заслуженный участник


31/12/15
936
Код:
local socket, code, message, buffer = ftp.connect(host, port, {request_timeout=8000})
local status, code, message = ftp.auth(socket, buffer, "anonymous", "IEUser@")
local list_socket, err = ftp.pasv(socket, buffer)
local status, err = socket:send("TYPE I\r\n")
local status, err = socket:send("RETR /sda1/New folder/20190315_183030.jpg\r\n")
local status, data = list_socket:receive()

Вдохновляюсь существующими скриптами, но там не нахожу примера. Wireshark показывает следующее
https://ibb.co/KjRfq7y
Всё правильно до предпоследней команды включительно.

 Профиль  
                  
 
 Re: Можно ли скачивать файлы с помощью сокетов Nmap?
Сообщение17.06.2020, 13:52 


09/05/16
138
Не вижу, чтобы это было явно отмечено в документации, но, скорее всего, list_socket:receive() нужно вызывать в цикле и складывать возвращаемые значения в таблицу, пока оно не вернёт пустую строку, как это сделано в функции list в примере выше. Возможно, можно считать размер файла (который передаёт FTP-сервер), а затем при помощи методов receive_bytes или receive_buf загрузить его целиком за один вызов, но я не вижу никакой документации, которая описывала бы эти методы.

Это происходит потому, что на низком уровне операционную систему можно попросить считать $\le n$ байт из соединения в предоставленный приложением буфер заданного размера $n$, и та имеет право вернуть приложению управление, считав меньше, чем $n$. (Функция list_socket:receive() вызывает nsock_read(), который, судя по комментарию, возвращает управление после чтения более-менее произвольного количества байт.)

 Профиль  
                  
 
 Re: Можно ли скачивать файлы с помощью сокетов Nmap?
Сообщение17.06.2020, 14:43 
Заслуженный участник


31/12/15
936
Получилось, спасибо! Запустил в цикле команду
Код:
local status, data = list_socket:receive_bytes(10)

 Профиль  
                  
 
 Re: Можно ли скачивать файлы с помощью сокетов Nmap?
Сообщение01.08.2020, 21:08 
Заслуженный участник


31/12/15
936
И теперь пытаюсь делать это в цикле (скачивать все файлы со страницы). В результате скачивается только первый файл, а все последующие не скачиваются (получаются файлы размера 0), потому что команда
Код:
status, data = list_socket:receive()

выдаёт статус false и дата EOF. Может, его (сокет) надо как-то чистить после скачивания файла?
P.S. Если в цикле создавать новый сокет для каждого файла, то всё скачивается. Но это как-то избыточно.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group