Работа с локальной сетью
, Сканирование портов и ИП адреса
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.217.37] |
|
|
Соблюдайте общие правила форума
MSDN Library
FAQ раздела
Поиск по разделу
Как правильно задавать вопросы
Работа с локальной сетью
, Сканирование портов и ИП адреса
|
Сообщ.
#1
,
|
|
|
|
Умные вы наши. подскажите, как просканировать открыте порты компьютера по определнному ИП ?
и еще, тут {Mischka} приводил как то пример работы с IdICMPClient. хотелось бы чуток поподробней узнать про этого клиента. да и примеров бобольше, а то с примером пингования машины я что то не очень разобралс - как сделать из него рабочую программу. |
|
Сообщ.
#2
,
|
|
|
|
Цитата Dock @ 28.02.04, 22:35 Умные вы наши. подскажите, как просканировать открыте порты компьютера по определнному ИП ? и еще, тут {Mischka} приводил как то пример работы с IdICMPClient. хотелось бы чуток поподробней узнать про этого клиента. да и примеров бобольше, а то с примером пингования машины я что то не очень разобралс - как сделать из него рабочую программу. ![]() ![]() 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; схемотично....но надеюсь принцип понятен |
|
Сообщ.
#3
,
|
|
|
|
Цитата _SMall_ @ 29.02.04, 15:54 схемотично....но надеюсь принцип понятен принцеп понятен... даже заработало все с первого раза... только вот почему то говрит что все порты открыты... |
|
Сообщ.
#4
,
|
|
|
|
Может ты работаешь в асинхронном режиме.
|
|
Сообщ.
#5
,
|
|
|
|
![]() ![]() 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 напиши ![]() ![]() Memo1.lines.add('Порт '+IntToSTr(x)+' - Открыт'); пробуй... |
|
Сообщ.
#6
,
|
|
|
|
ну вот зарабоать заработало, хотя проблема осталась одна - когда все делаю это в цикле, то проверяет он только последний порт - на него и реагирует.
правда я немного изменил текст: 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 Может ты работаешь в асинхронном режиме. не имею понятия в каком я режиме работаю - как это проверить и если что настроить ? |
|
Сообщ.
#7
,
|
|
|
|
Цитата 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; - попробуй убрать |
|
Сообщ.
#8
,
|
|
|
|
Цитата _SMall_,2.03.04, 16:03 ClientSocket.Close; - попробуй убрать вообщето немного туповатый совет - это первое что я сделал. по моим наблюдениям, метод Open вызывается 1024 раза, при этом сканируемый порт = количество итераций+1 . программа нормально работает только при единичном вызове метода Open. Даже если просто подряд вызвать этот метод два раза с заранее открытым портом, происходит ошибка - порт закрыт. Правильно выполняется только при одиночном вызове (ClientSocket.Open) или активации (ClientSocket.Active:=true). |
|
Сообщ.
#9
,
|
|
|
|
В ClientSocket.open() и написано ClientSocket.Active:=true.
Поскольку на открытие порта требуется время, нельзя просто в цикле писать open(), close(). Нужно давать команду open() и ждать реакции сокета на нее, после чего - закрывать и переходить к следующему. |
|
Сообщ.
#10
,
|
|
|
|
наверно и есть проблема в ожидании открытия сокета. если делать это как ты предложил - он ничего не ждет а сканирует последний порт. кучу раз
|