Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 |

 

  Вопрос: WinSock и активный режим... Добавлено: 09.11.05 18:22  

Автор вопроса:  Сергей
Может кто подскажет, как решить проблему: есть программа (на клиентской стороне), которой нужно связаться с сервером, чтобы работать по ftp. Но сервер меня не понимает! Постоянно переспрашивает пароль, потом логин и пароль, опять пароль, и так далее - можно до Судного дня развлекаться :-). Сервер использует пассивный сокет по соображениям безопасности, и мой Winsock поэтому буксует. Как перевести Winsock из PASS в PORT?! Ведь должен быть простой выход!

Ответить

  Ответы Всего ответов: 23  

Номер ответа: 1
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #1 Добавлено: 09.11.05 22:42
посмотри другие примеры по работе с ftp

Ответить

Номер ответа: 2
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #2
Добавлено: 10.11.05 01:39
скорее всего для пассивного режима существует команда FTP'шная... если даже и не так, то можно подсмотреть снифером пакеты (в частности команды) что обмениваются меж собой сервер и, к примеру, Total Comander, который, на сколько мне известно, пассивный режим поддерживает.

ЗЫ
Заранее прошу прощения если не в тему, т.к. что такое пассивный сокет представляю с трудом... я про пассивный режим доступа к FTP'шнику...

Ответить

Номер ответа: 3
Автор ответа:
 GSerg



Вопросов: 0
Ответов: 1876


 Профиль | | #3 Добавлено: 10.11.05 02:36
Пассивных сокетов нет...
Ftp-команда PASV есть...
http://www.practicallynetworked.com/support/pasvexplain.htm

Ответить

Номер ответа: 4
Автор ответа:
 Сергей



Вопросов: 4
Ответов: 15
 Профиль | | #4 Добавлено: 10.11.05 12:09
Есть пассивные сокеты, то есть они находятся на прослушке, а не выясняют самостоятельно, кто к ним подключился. Это уже становится заботой самого клиента :-).

В том-то и проблема, что пароль и имя пользователя запрашиваются сразу после подключения и "объяснить" серверу ничего не успеваешь. Эта функция должна быть в самом Winsock, вот только я ее не смог найти...

Допустим,CuteFTP одинаково лихо управляется и с PASV, и с PORT (а написан он на VB), и я сомневаюсь, что сделали его без Winsock :-). В скрипте автоматизации стоит команда (Object).DataChannel = "PORT", и все работает.

Ответить

Номер ответа: 5
Автор ответа:
 Сергей



Вопросов: 4
Ответов: 15
 Профиль | | #5 Добавлено: 10.11.05 12:10
Есть пассивные сокеты, то есть они находятся на прослушке, а не выясняют самостоятельно, кто к ним подключился. Это уже становится заботой самого клиента :-).

В том-то и проблема, что пароль и имя пользователя запрашиваются сразу после подключения и "объяснить" серверу ничего не успеваешь. Эта функция должна быть в самом Winsock, вот только я ее не смог найти...

Допустим,CuteFTP одинаково лихо управляется и с PASV, и с PORT (а написан он на VB), и я сомневаюсь, что сделали его без Winsock :-). В скрипте автоматизации стоит команда (Object).DataChannel = "PORT", и все работает.

Ответить

Номер ответа: 6
Автор ответа:
 GSerg



Вопросов: 0
Ответов: 1876


 Профиль | | #6 Добавлено: 10.11.05 13:08
Чел.

Слушающий сокет не называется пассивным.
Это первое.
В винсоке нет ни одной команды FTP.
Это второе.

Не путай уровни транспорта.
Их всего семь.
Тебе нужен уровень протокола, а ты пытаешься работать с ним свойствами сокета.
Сокет вообще не трогай. Если он законнектился, это всё, что от него требуется. Потом только SendData.

Ответить

Номер ответа: 7
Автор ответа:
 Сергей



Вопросов: 4
Ответов: 15
 Профиль | | #7 Добавлено: 10.11.05 13:53
GSerg, спасибо за ваши ответы. Я, разумеется, не эксперт (до вас мне далеко), поэтому в полемику ввязываться не буду. Если честно, я просто ищу решения своей проблемы. Простите, что своими речами перешел "красную черту", и оскорбил ваши чувства. Честное слово, мне очень жаль.

Наверное, вы правы, вы более компетентны, нежели я. Если вас не затруднит, напишите (или же ткните носом), как мне реально выйти из этого затруднительного положения? Говорите, что это - транспорт. И слава Богу! Но что мне делать-то? Нужен уровень протокола? Я бы с радостью, но не знаю, что мне предприять.

Winsock коннектится, тут проблем нет, но после того, как я что-то ввел через SendData (возможно, что неправильно), сервер требует логин и пароль. Вот так и начинается эта карусель :-(. Как я понимаю, после ответа сервера, что подключение состоялось, я могу изменить уровень протокола. Какая команда нужна? И вообще, где мне взять список этих комманд? В виндошных хелпах - кот наплакал (если не выражаться уж совсем откровенно), а для меня она ценна и необходима.

Буду признателен за ценный совет.

Ответить

Номер ответа: 8
Автор ответа:
 GSerg



Вопросов: 0
Ответов: 1876


 Профиль | | #8 Добавлено: 10.11.05 14:05
Я, разумеется, не эксперт (до вас мне далеко), поэтому в полемику ввязываться не буду. Если честно, я просто ищу решения своей проблемы. Простите, что своими речами перешел "красную черту", и оскорбил ваши чувства. Честное слово, мне очень жаль.

Наверное, вы правы, вы более компетентны, нежели я.

Вот ужас-то...

Если я не кажусь белым и пушистым, это не следует трактовать как моё стремление позиционировать себя выше кого-то.
Я просто не белый и пушистый, не более того.

Нужен уровень протокола? Я бы с радостью, но не знаю, что мне предприять.

Это значит, что нужно слать правильные команды FTP, а не менять свойства сокета.

И вообще, где мне взять список этих комманд?

Где-то был мануал, щас посмотрю...

Ответить

Номер ответа: 9
Автор ответа:
 GSerg



Вопросов: 0
Ответов: 1876


 Профиль | | #9 Добавлено: 10.11.05 14:09
Например, http://www.faqs.org/rfcs/rfc959.html
Список команд - раздел 5.3.1

Ну и вообще много интересного там...

Ответить

Номер ответа: 10
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #10
Добавлено: 10.11.05 20:14
ну будующее: http://rfc.net/ лучший друг программиста :))

Ответить

Номер ответа: 11
Автор ответа:
 Сергей



Вопросов: 4
Ответов: 15
 Профиль | | #11 Добавлено: 10.11.05 20:57
Люди всякие встречаются :-). Сам не белый и пушистый, поэтому и стараюсь быть вежливым... чтобы не хамить кому-нибудь.

Интересного много, согласен. Но меня интересует следующее:

PORT <SP> <host-port> <CRLF>

host-port - что это? Насколько я понял, сервер уже меня принял с распростертыми объятиями, скажем, на 21-ом порту. И какой еще порт надо указывать? Опять 21-ый, 990-ый, или еще какой? А может IP-шник через Resolve добывать и пихать туда? Это тупик. Возможно, я тут вообще идиотские вопросы задаю, но вы уж не откажите человеку в участии :-). Вообще, как система авторизации проходит, в том числе при наличии SSL (как понимаю, проблемы из-за этого). Мне не хватает понимания самой системы, отсюда эти беспорядочные вопросы и небезупречные суждения. Помогите, plise!

Ответить

Номер ответа: 12
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #12 Добавлено: 10.11.05 22:39
может просто стоит почитать мануал по FTP протоколу?
http://web-island.narod.ru/doc/ftp.rar

Ответить

Номер ответа: 13
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #13
Добавлено: 11.11.05 01:48
Вкратце, обмен командами по протоколу FTP идет через 21-й порт, а данными через другой, который выясняется в ходе общения с сервером по 21-му порту

Ответить

Номер ответа: 14
Автор ответа:
 Сергей



Вопросов: 4
Ответов: 15
 Профиль | | #14 Добавлено: 11.11.05 07:07
может просто стоит почитать мануал по FTP протоколу? http://web-island.narod.ru/doc/ftp.rar

Не все так просто, HACKER, там простенький мануальчик, и нужной коммандой PORT даже не пахнет. В заключение, дается совет, что другие комманды можно посмотреть в хелпе FTP-клиента. А ftp.exe не имеет интересующей комманды, либо держит ее в большущем секрете (даже от своих разработчиков, как понимаю). Так что этот вариант не канает.
sne я тоже благодарен, но нужной инфы для данного случая по предложенному адресу я не нарыл.
Как-то вообще странно получается - все либо слишком сложно, либо слишком просто (и неполно), а золотой середины не наблюдается. Может карма, так ее разэтак, взялась за меня по полной программе? Ладно, вопрос риторический, и не по теме вовсе...
Теперь вопрос к Sharp. Спасибо за ответ вкратце, но он мне ничего пока не объяснил. Может вы встречались с подобным траблом? Тут вопрос вообще странный: мне говорят, что PORT - стандартная комманда FTP. Согласен, наверное это так. Но нигде не встретил описания примера - как вообще эту штуку замутить? Спецификация, которую мне посоветовал читать GSerg - вещь, вообщем-то, чудесная, но это справочник, а не мануал в точном смысле этого слова. Он интересен, не спорю, но если ты уже что-то сделал и теперь разбираешься в тонкостях (то есть думаешь как сделать то, что ты уже сделал, лучшим в работе). Но я вообще ничего не имею на руках! И мне эти тонкости ничего существенного сказать не могут.
Простите, ребята, я наверое уже достал вас своими расспросами. Но я по прежнему ищу ответ, кто может - помогите.

Ответить

Номер ответа: 15
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #15
Добавлено: 11.11.05 08:17
IP и порт - 6 байт (4 байта IP, 2 байта порт)... Вот, берешь, открываешь у себя порт для передачи данных, а серверу передаешь свой IP и номер открытого порта. Все эти 6 байт передаются в 10-чном виде, разделенные запятой. Ну и получается код вроде такого (на .NET):

        Listener = New TcpListener(Dns.GetHostByName(Dns.GetHostName()).AddressList(0), 0)
        Listener.Start()

        'Тут номер порта, например 8765
        Dim dataport As Int32 = CType(Listener.LocalEndpoint, IPEndPoint).Port

        'Тут IP, например "62.118.252.240"
        Dim datahost As String = CType(Listener.LocalEndpoint, IPEndPoint).Address.ToString()

        'Разбиваем порт на два байта
        Dim fport As Int32 = dataport \ 256
        Dim sport As Int32 = dataport Mod 256

        'В datahost меняем точки на запятые, т.к. FTP-серверу нужны именно запятые
        datahost = datahost.Replace(".", ",";)
        
        'Отправляем команду PORT серверу
        Send("PORT " & datahost & "," & fport.ToString & "," & sport.ToString)

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам