Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.11.2013, 21:13   #1
avr_192
Пользователь
 
Регистрация: 17.11.2013
Сообщений: 12
Вопрос IdTCPClient

Здравствуйте. Помогите написать программу, определяющую тип протокола висящий на порту (ftp, http, https, ssh, rdp, smb, pop3, smtp). Желательно с использованием IdTCPClient.

Я понимаю, что надо отправить определенный запрос на который порт он ответит типом протокола.
Подымаю сервер на ServerSocket компоненте. Начинаю сканировать порты XSpider7, получаю следующие запросы:
GET / HTTP/1.1
Host: root:20
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 7.0) PTX
Connection: Close

id
ping
daaaaaaaaaaaaaaa
eaaaaaaaaaaaaaaa
gaaaaaaaaaaaaaaa
A0 GETCONFIG SELF 0 <EOM>

и прочие запросы типа:
zмBUЁыX)2ПУ=љL
или
#1+#0+#0+#0+#1+#0+#0+#0+#8

Но при отправки их на любой порт через компонент IdTCPClient1 или ClientSocket1, либо ничего не происходит либо происходит разрыв соединения.

avr_192 вне форума Ответить с цитированием
Старый 17.11.2013, 21:48   #2
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

Цитата:
Я понимаю, что надо отправить определенный запрос на который порт он ответит типом протокола.
это где такое написано что должен?
eval вне форума Ответить с цитированием
Старый 17.11.2013, 21:54   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
который порт он ответит типом протокола.
Не факт. Совсем не ганатия. Может просто прийти текст приветствия типа "Hello 19.168.0.5 GUILDFtpr v2.56"
Не, серьезно, это не гарантия.
Хотя в теории можно искать в приходяще строке знакомые слова (ftp, smtp и т.д.).
Цитата:
либо ничего не происходит
Ну так надо не на любой порт а на определенный, на тот что слушает сервер, по крайней мере сейчас на момент тренировки.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.11.2013, 22:27   #4
avr_192
Пользователь
 
Регистрация: 17.11.2013
Сообщений: 12
По умолчанию

мне надо написать аналог XSpider. То есть вводишь хост и порт, программа выплевывает, что за сервис там висит.
С чего начать, как слушать. Я умею только данные отправлять.

была идея накидать компонентов: IdFTP, IdHTTP, IdPOP3, IdSMTP, IdTelnet и т.д, поочередно конектица с каждого и какой компонент примет порт за родной, такой протокол и висит. Но как быть с виндовскими протоколами (smb, rdp, netbios-ns) и такими программами как VNC, SSH, radmin,

Последний раз редактировалось Stilet; 17.11.2013 в 23:33.
avr_192 вне форума Ответить с цитированием
Старый 17.11.2013, 22:39   #5
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

берете какойнить wireshark и смотрите что и как отправляет паук и делаете вывод
eval вне форума Ответить с цитированием
Старый 17.11.2013, 22:53   #6
avr_192
Пользователь
 
Регистрация: 17.11.2013
Сообщений: 12
По умолчанию

Ну я и говорю:
Цитата:
Сообщение от avr_192 Посмотреть сообщение
Подымаю сервер на ServerSocket компоненте. Начинаю сканировать порты XSpider7, получаю следующие запросы:
GET / HTTP/1.1
Host: root:20
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 7.0) PTX
Connection: Close

id
ping
daaaaaaaaaaaaaaa
eaaaaaaaaaaaaaaa
gaaaaaaaaaaaaaaa
A0 GETCONFIG SELF 0 <EOM>

и прочие запросы типа:
zмBUЁыX)2ПУ=љL
или
#1+#0+#0+#0+#1+#0+#0+#0+#8

Но при отправки их на любой порт через компонент IdTCPClient1 или ClientSocket1, либо ничего не происходит либо происходит разрыв соединения.

avr_192 вне форума Ответить с цитированием
Старый 17.11.2013, 23:02   #7
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

значит что-то не то делаете
eval вне форума Ответить с цитированием
Старый 17.11.2013, 23:41   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Это не такая простая задача. Нужно знать как разные системы реагируют и что отвечают. А если там защифрованно то...
Начни с начала - FTP сервер или SMTP. Они обычно при коннекте представляются, отвечая строкой. попробуй просто приконнектится к какому-нибудь серверу по портам 21, 25, 110 и проверить пришло ли в событии коннекта что-нибудь, если пришло просто выведи в Мемо. Это хотя-бы для начала - стартануть с пентеста известных сервисов.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.11.2013, 02:26   #9
Son Of Pain
Участник клуба
 
Регистрация: 23.12.2010
Сообщений: 1,129
По умолчанию

Тебе не дампы паука смотреть надо, а читать про то, как устроены нужные протоколы. Потому что без понимания этого ты ничего не сделаешь.

Задача сводится к попытке добиться от порта ответа, соответствующего определенному протоколу. Для smtp, к примеру, достаточно будет послать команду HELO <domain_name> (или EHLO), и посмотреть код ответа (250 в случае успеха, 550 в случае ошибки, что там еще по rfc может быть). Баннер, который сервер отправляет сразу при подключении, нигде не стандартизирован, потому его можно игнорировать - там что угодно быть может.
Для ftp можешь пробовать анонимный вход сделать; для http - GET запрос индексной страницы, для https вообще ссл-хендшейк сделать придется.

В общем, гуглишь номер rfc нужного протокола и садишься читать до просветления.

И да, разрыв соединения - нормальное поведение для большинства серверов в случае, когда ты шлешь им не соответствующие протоколу данные.
Son Of Pain вне форума Ответить с цитированием
Старый 26.11.2013, 21:21   #10
avr_192
Пользователь
 
Регистрация: 17.11.2013
Сообщений: 12
По умолчанию

Пишу простую программку:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var t:tstringlist;
bo:boolean;
begin
 try
 t:=tstringlist.Create;
 t.Add(#4+#116+#101+#115+#116+#45+#113+#117+#101
+#117+#101+#32);


IdTCPClient1.Connect;
IdTCPClient1.Socket.WriteRFCStrings(t);

memo1.Text:=  IdTCPClient1.Socket.ReadLnRFC(bo);

     { TODO -oUser -cConsole Main : Insert code here }
  except
    on E: Exception do  begin
     memo1.Lines.Add(IdTCPClient1.Port.ToString);
    memo1.Lines.Add( E.Message);
    end;
  end;
end;
При обращении к http серверу на компоненте IdHTTPServer получаю: Connection Closed Gracefully.

А при обращении к http на IIS висящий на win server 2003 я получаю:
HTTP/1.1 400 Bad Request

А при обращении к ftp серверу висящий на win server 2003 я получаю:
Socket Error # 10061
Connection refused.

Тот же результат я получаю при обращении к порту которого нет, но доступ к ftp нормальный.

Я понимаю, что надо отправлять рад запросов, по ответам на запросы уже определять тип сервиса. Но какие конкретно запросы отправлять я нигде не могу найти. На то что я отправляю я получаю либо повисон программы, либо сообщение приветствия порта. Но по строке приветствия нельзя судить о типе работающего сервиса.
avr_192 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
idtcpclient kostya67 Работа с сетью в Delphi 4 04.11.2013 14:06
работа с IdTCPClient knopkodaf Работа с сетью в Delphi 5 28.05.2012 20:07
IdTCPClient+FileListBox hysek Работа с сетью в Delphi 9 09.05.2012 02:00
Вопрос по IdTCPClient -Jack- Работа с сетью в Delphi 2 04.01.2012 14:09
Ошибка IdTcpClient sanek99 Работа с сетью в Delphi 1 13.02.2011 17:19