![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Програмный PING [D7, WinXP]
SiONYX © (2003-09-04 23:57:00)
Идея следующая: прежде чем пытаться соединиться с удаленной машиной - пропинговать ее. Если отзовется => включена и можно соединиться. (А то если машина выключена - попытка коннекта "затягивается").
Есть хорошая утилитка PING, но как бы зделать что-то подобное програмно.
Может кто посоветует что-то другое реализующее эту идею.
Заранее спасибо.
panov (2003-09-13 14:06:00) [1]
>Oleg The First (13.09.03 04:52) [24]
Свой вопрос - в другой топик.
Oleg The First (2003-09-13 04:52:00) [2]
Вот функция которую вызывает у немя пингующий поток.
В Windows не так уж и много потоков можно запустить.
У меня работает 200 потоков паралельно. (можно увеличить до 500)
Значит проблемма состоит с тормозами.
допустим мне нада просканить не 256 адрессов а 40*256 (вот такие у нас сетки)
И что? а то что 256 адрессов сканируется примерно 5 сек
5*40 - долго ждать. ЧТО ДЕЛАТЬ? подскажите!!!!
может не пингами сканить? или как? оч нуна надёжный и быстрый алгоритм.
function IPisLive(HostNorA: String; const TimeOut: Word): Boolean;
var
hIP : THandle;
pBuffer: PChar;
pIpe : ^icmp_echo_reply;
lwsaData: WSAData;
Error : DWORD;
Counter: Word;
// destAddress : In_Addr;
// pHostEn : PHostEnt;
begin
// Создаем handle
hIP := IcmpCreateFile();
Error := WSAStartup(MakeWord(1,1), lwsaData);
if (Error <> 0) then RaiseLastOSError;
GetMem( pIpe, sizeof(icmp_echo_reply) + 32);
GetMem( pBuffer, 32);
pIpe.Data := pBuffer;
pIpe.DataSize := 32;
Result := False;
try
for Counter := 1 to 4 do
begin
IcmpSendEcho(hIP,
Str2IP(HostNorA),
pBuffer,
32,
Nil,
pIpe,
sizeof(icmp_echo_reply) + 32,
TimeOut);
Error := GetLastError();
if (error = 0) then Result := True;
end;
finally
IcmpCloseHandle(hIP);
WSACleanup();
FreeMem(pIpe);
FreeMem(pBuffer);
end;
end;
Anatoly Podgoretsky (2003-09-05 21:44:00) [3]
Это посторонний модуль, возможно на JEDI есть
SiONYX (2003-09-05 21:27:00) [4]
В догон: в той программе, которую выложил Вася Пупкин, есть ссылка на модуль winsock2, которого у меня нет. Кто-ньть может подсказать, где ее добыть?
panov (2003-09-05 20:37:00) [5]
Для решения этой задачи надо использовать сокеты на API, в этом случае можешь сам определить TimeOut.
SiONYX (2003-09-05 20:31:00) [6]
Спасибо, что проявили интерес и ответили на мой вопрос. Спасибо и за исходный текст программы. Спасибо так же и за мысль (трезвую :), что ping может работать не правильно (для определения сервиса) - я сделал выводы - буду писать :)
Еще раз спасибо всем :)
Е-Моё имя (2003-09-05 20:01:00) [7]
> А давайте голосовать?
давайте!
я буду первым. голосую! да-да-нет-да!
Anatoly Podgoretsky (2003-09-05 19:58:00) [8]
Делай, разрешаем.
panov © (05.09.03 18:26) [17]
А ты в Потрепаться не бросишь :-)
panov (2003-09-05 18:26:00) [9]
>Е-Моё имя © (05.09.03 18:22) [16]
думаю надо разрешить... а то обидица..
Хотя и так тоже может обидеться...
А давайте голосовать?
Е-Моё имя (2003-09-05 18:22:00) [10]
думаю надо разрешить... а то обидица..
panov (2003-09-05 18:07:00) [11]
Вася Пупкин © (05.09.03 18:05) [14]
а кто спорит ? для того и использую -)
Так разрешаем использовать или нет?
Вася Пупкин (2003-09-05 18:05:00) [12]
> а кто спорит ? для того и использую -)
Anatoly Podgoretsky (2003-09-05 17:56:00) [13]
Polevi © (05.09.03 17:49) [12]
Не всегда, а вот посылка NOP практически всегда
Polevi (2003-09-05 17:49:00) [14]
ping иногда может быть полезен - некоторые провайдеры (Sky Link) рвут связь после определенного таймаута - ping помогает поддерживать это соединение
Anatoly Podgoretsky (2003-09-05 17:19:00) [15]
Вася Пупкин © (05.09.03 17:10) [9]
Неверно, кто запрещает, ему же разрешение нужно.
panov (2003-09-05 17:13:00) [16]
Господа, нужно написать программно пинг, что-бы можна было изменять размер пакета и отслеживать процент потерь, и куда-то это записывать
Конечно нужно.
А вопрос какой?
Вася Пупкин (2003-09-05 17:10:00) [17]
Что мешает ? %)
RIPSys (2003-09-05 17:01:00) [18]
Господа, нужно написать программно пинг, что-бы можна было изменять размер пакета и отслеживать процент потерь, и куда-то это записывать
Е-Моё имя (2003-09-05 11:59:00) [19]
> Излишество это и извращение.
точна! а фсё от непонимания...
Reindeer Moss Eater (2003-09-05 11:18:00) [20]
Идея следующая: прежде чем пытаться соединиться с удаленной машиной - пропинговать ее.
Идея бесполезная и ненужная.
прежде чем пытаться соединиться с удаленной машиной
то есть приложение хочет получить какой-то сервис от удаленного хоста.
пропинговать ее
Для проверки доступности совершенно иного сервиса зачем-то прибегают к помощи сервиса ping.
И что это даст? Допустим требуемый сервис на удаленном хосте отсутствует, а ICMP пакеты к нему проходят. Допустим что нужный сервис на том хосте готов принять наш запрос а ICMP пакеты к нем рубятся его сетевым экраном.
Излишество это и извращение.