Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.RU > Delphi: Сетевое программирование > Мониторинг Ip


Автор: Century27 21.11.17, 08:50
Добрый день! В сетевом программировании я можно сказать новичок, и поэтому прошу вашей помощи. Требуется создать программку, которая будет отображать информацию о сетевых устройствах (компьютерах айпи-телефонах) по заранее заданным айпи адресам. Если простым языком, то имеется порядка десяти устройств со статическими айпи-адресами. Требуется программа, которая будет отображать в сети данный айпи адрес или же нет.
Предпологается, что будет выглядеть так: имеется таблица с айпи-адресами (которые можно добавлять или удалять), и напротив айпи-адреса статус устройства (включен\выключен).
Перечитал кучу форумов, литературы, мануалов. Пересмотрел кучу роликов и примеров, но так ничего и не понял что это такое и с чем это едят. Прошу Вашей помощи в реализации проекта.

Автор: ^D^ima 21.11.17, 09:29
Ищи реализацию ping на delphi

А вообще мне кажется ты изобретаешь велосипед.

Добавлено
Кстати такой уже есть бесплатный софт:
http://www.nirsoft.net/utils/multiple_ping_tool.html

Автор: Century27 21.11.17, 10:01
Оно то и понятно, что подобные решения давно существуют. Про Ping уже думал и пытался реализовать на нем, но проблема в длительном ожидании ответа даже одного айпи-адреса. А опрашивать сразу несколько.... Советуют многопоточность использовать.

Автор: ^D^ima 21.11.17, 10:07
Цитата Century27 @
проблема в длительном ожидании ответа даже одного айпи-адреса

у тебя сеть локальная? пинг должен за 1 МС проходить. До гугла у меня 6 МС. Так что про долго быть не должно. Для 10-ти устройств раз в 10 секунд по порядку пинговать можно и без многопоточности

Автор: Century27 21.11.17, 10:18
И все же, можно поподробнее, если можно даже с примерчиком.
Хочу понять хотя бы начало, а дальше как говориться больше

Автор: Century27 21.11.17, 11:29
Мне хотя бы разобраться как преобразовать полученное значение от Ping в "активен\выключен".
И как быть в случае если адрес недоступен прога подвисает на некоторое время и не переходит к пингованию следующего адреса

Автор: Fr0sT 21.11.17, 12:03
CreateProcess('ping.exe ya.ru'), вернет ProcessHandle
По таймеру проверять ExitCode: 0 - ОК, <>0 - ошибка. Всё.

По желанию - запускать несколько процессов одновременно.
Это наиболее быстрый и простой в реализации для новичка в сетях способ.

Автор: Century27 21.11.17, 12:15
Цитата Fr0sT @
CreateProcess('ping.exe ya.ru'), вернет ProcessHandle
По таймеру проверять ExitCode: 0 - ОК, <>0 - ошибка. Всё.

А вот с этого места поподробнее, если не затруднит

Автор: ^D^ima 21.11.17, 12:55
Цитата Fr0sT @
CreateProcess('ping.exe ya.ru'), вернет ProcessHandle
По таймеру проверять ExitCode: 0 - ОК, <>0 - ошибка. Всё.

гениально :good:

Автор: Fr0sT 22.11.17, 06:54
Цитата Century27 @
А вот с этого места поподробнее, если не затруднит

Что там подробнее-то? Функции CreateProcess и GetExitCodeProcess, открыть MSDN и читать. Ну или лениво гуглить готовые примеры.

Автор: ^D^ima 22.11.17, 07:38
Тут пример с объяснениями:
http://www.cyberforum.ru/delphi-beginners/thread548891.html

Автор: Virtuals 22.11.17, 17:09
вы помоему изобретаете велосипед!, если сеть локальная (все устройства в пределах физической сети до маршрутизатора), то ping вообще не нужен! достаточно послать запрос уровня L2 (ARP) и ловить ответ.
в *nix системах давно для данных целей есть утилита arp-scan
нечто подобное сделали и под windows.
https://github.com/QbsuranAlang/arp-scan-wi...p-scan/arp-scan
код на си, но очень легко перевести на паскаль, ибо чистый api
а можно использовать как законченную утилиту, ваши нужды перекроет с лихвой, умеет сканировать по списку взятому из файла.

PS и да ping часто может быть отключен/запрещен/прикрыт файрволом, а вот от arp не скроется никто.

Автор: Fr0sT 23.11.17, 07:59
Цитата Virtuals @
очень легко перевести на паскаль, ибо чистый api

Да уж чище некуда
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    #pragma comment(lib, "iphlpapi.lib")

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)