На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Соблюдайте общие правила форума
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Указывайте точные версии Delphi и используемых сетевых библиотек.

Не приветствуется поднятие старых тем. Если ваш вопрос перекликается со старой темой, то для вопроса лучше создать новую тему, а старую указать в первом сообщении с описанием взаимосвязи.

Внимание:
попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки бан.
Мат в разделе - бан на три месяца...

Полезные ссылки:
user posted image MSDN Library user posted image FAQ раздела user posted image Поиск по разделу user posted image Как правильно задавать вопросы


Выразить свое отношение к модераторам раздела можно здесь: user posted image Krid, user posted image Rouse_

Модераторы: Krid, Rouse_
  
> Работа с локальной сетью , Сканирование портов и ИП адреса
    Умные вы наши. подскажите, как просканировать открыте порты компьютера по определнному ИП ?
    и еще, тут {Mischka} приводил как то пример работы с IdICMPClient. хотелось бы чуток поподробней узнать про этого клиента. да и примеров бобольше, а то с примером пингования машины я что то не очень разобралс - как сделать из него рабочую программу.
      Цитата Dock @ 28.02.04, 22:35
      Умные вы наши. подскажите, как просканировать открыте порты компьютера по определнному ИП ?
      и еще, тут {Mischka} приводил как то пример работы с IdICMPClient. хотелось бы чуток поподробней узнать про этого клиента. да и примеров бобольше, а то с примером пингования машины я что то не очень разобралс - как сделать из него рабочую программу.

      ExpandedWrap disabled
         
        var
        x: integer;
        begin
        for x:=1 to 1024 do
        try
        ClientSocket.Port:=x;
        ClientSocket.Host:='127.0.0.1';
        ClientSocket.Open;
        Memo1.lines.add('Порт '+IntToSTr(x)+' - открыт');
        except
        Memo1.lines.add('Порт '+IntToSTr(x)+' - закрыт');
        end;
        end;

      схемотично....но надеюсь принцип понятен
        Цитата _SMall_ @ 29.02.04, 15:54
        схемотично....но надеюсь принцип понятен

        принцеп понятен... даже заработало все с первого раза... только вот почему то говрит что все порты открыты...
          Может ты работаешь в асинхронном режиме.
            ExpandedWrap disabled
              var
              x: integer;
              begin
              for x:=1 to 1024 do
              try
              ClientSocket.Port:=x;
              ClientSocket.Host:='127.0.0.1';
              ClientSocket.Open;
              except
              Memo1.lines.add('Порт '+IntToSTr(x)+' - закрыт');
              end;
              end;

            это вот так попробуй, а в OnConnect у ClientSocket`a напиши
            ExpandedWrap disabled
               
              Memo1.lines.add('Порт '+IntToSTr(x)+' - Открыт');


            пробуй...
              ну вот зарабоать заработало, хотя проблема осталась одна - когда все делаю это в цикле, то проверяет он только последний порт - на него и реагирует.
              правда я немного изменил текст:
              begin
              if Length(Edit1.Text) > 0 then
              Begin
              ClientSocket.Host := Edit1.Text;
              for x:=1 to 20 do
              begin
              x:=StrToInt(Edit2.Text);
              ClientSocket.Port:=x;
              ClientSocket.Open;
              ClientSocket.Close;

              end;
              end;
              end;

              и написал ClientSocketError и ClientSocketConnect на выдачу соответсвующих сообщений

              Добавлено в :
              Цитата Anatoly Podgoretsky,1.03.04, 12:52
              Может ты работаешь в асинхронном режиме.

              не имею понятия в каком я режиме работаю - как это проверить и если что настроить ?
                Цитата Dock,2.03.04, 08:22
                ну вот зарабоать заработало, хотя проблема осталась одна - когда все делаю это в цикле, то проверяет он только последний порт - на него и реагирует.
                правда я немного изменил текст:
                begin
                if Length(Edit1.Text) > 0 then
                Begin
                ClientSocket.Host := Edit1.Text;
                for x:=1 to 20 do
                begin
                x:=StrToInt(Edit2.Text);
                ClientSocket.Port:=x;
                ClientSocket.Open;
                ClientSocket.Close;

                end;
                end;
                end;

                и написал ClientSocketError и ClientSocketConnect на выдачу соответсвующих сообщений

                Добавлено в :
                Цитата Anatoly Podgoretsky,1.03.04, 12:52
                Может ты работаешь в асинхронном режиме.

                не имею понятия в каком я режиме работаю - как это проверить и если что настроить ?

                ClientSocket.Close; - попробуй убрать
                  Цитата _SMall_,2.03.04, 16:03
                  ClientSocket.Close; - попробуй убрать

                  вообщето немного туповатый совет - это первое что я сделал. по моим наблюдениям, метод Open вызывается 1024 раза, при этом сканируемый порт = количество итераций+1 . программа нормально работает только при единичном вызове метода Open. Даже если просто подряд вызвать этот метод два раза с заранее открытым портом, происходит ошибка - порт закрыт. Правильно выполняется только при одиночном вызове (ClientSocket.Open) или активации (ClientSocket.Active:=true).
                    В ClientSocket.open() и написано ClientSocket.Active:=true.
                    Поскольку на открытие порта требуется время, нельзя просто в цикле писать open(), close(). Нужно давать команду open() и ждать реакции сокета на нее, после чего - закрывать и переходить к следующему.
                      наверно и есть проблема в ожидании открытия сокета. если делать это как ты предложил - он ничего не ждет а сканирует последний порт. кучу раз
                      1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                      0 пользователей:


                      Рейтинг@Mail.ru
                      [ Script execution time: 0.0695 ]   [ 15 queries used ]   [ Generated: 24.10.26, 01:53 GMT ]