Внешняя компонента для тех, кто не хочет использовать для пинга программу ping.exe или WMI. С помощью компоненты можно проверить доступность соединения с хостом в сети по протоколу ICMP.
Преимущества:
- Не требуется наличие программы ping.exe;
- Не требуется наличие COM-объектов;
- Не требуется наличие прав администратора;
- Удобно работать с результатом выполнения;
Недостатки:
- Нет поддержки IPv6;
- Нет поддержки Linux;
- Возможно еще куча др. недостатков о которых я не подумал…
Для работы компоненты требуется библиотека ICMP.DLL, которая присутствует по умолчанию в любой ОС Windows начиная с XP и выше. Компонента тестировалась на Windows 10, платформа 1С версии 8.3.10.2650 (x86). На 64-х разрядных платформах работа не тестировалась.
Внешняя компонента написана по технологии Native API, имеет всего 1 метод и 1 свойство.
Методы:
1. Ping | ЭхоЗапрос(<Адрес>, <РазмерПакет>, <Таймаут>, <КодОшибки>, <IPАдресХоста>) — Выполняет эхо-запрос на указанный адрес;
Параметры:
<Адрес> — Тип Строка. Адрес куда нужно послать пинг в виде имени или IP-адреса (IPv4). IPv6 не поддерживается.
<РазмерПакета> — Тип Число. Размер посылаемого пакета в байтах. Параметр не обязательный, значение по умолчанию 32.
<Таймаут> — Тип Число. Таймаут это-запроса в миллисекундах. Параметр не обязательный, значение по умолчанию 5000.
<КодОшибки> — Тип Число. Параметр не обязательный, в качестве параметра должна передаваться переменная в которую будет помещен код ошибки, в случае возникновения ошибки при отправке эхо-запроса.
Возможные коды ошибок:
0 = "Success"
11001 = "Buffer Too Small"
11002 = "Destination Net Unreachable"
11003 = "Destination Host Unreachable"
11004 = "Destination Protocol Unreachable"
11005 = "Destination Port Unreachable"
11006 = "No Resources"
11007 = "Bad Option"
11008 = "Hardware Error"
11009 = "Packet Too Big"
11010 = "Request Timed Out"
11011 = "Bad Request"
11012 = "Bad Route"
11013 = "TimeToLive Expired Transit"
11014 = "TimeToLive Expired Reassembly"
11015 = "Parameter Problem"
11016 = "Source Quench"
11017 = "Option Too Big"
11018 = "Bad Destination"
11032 = "Negotiating IPSEC"
11050 = "General Failure"
<IPАдресХоста> — Тип Строка. Параметр не обязательный, в качестве параметра должна передаваться переменная в которую будет помещен IP-адрес (IPv4) отвечающего хоста. Таким образом можно узнать IP-адрес по имени хоста переданного в параметре <Адрес>.
Возвращаемое значение: Тип Число. Время между эхо-запросом и эхо-ответом в миллисекундах. В случае возникновения ошибки возвращаемое значение равно -1.
Свойства:
1. Version | Версия — Тип Строка. Содержит версию компоненты в виде строки. Данное свойство доступно только для чтения. Текущая версия 1.0.
В качестве примера представлена обработка для обычного приложения с внешней компонентой. Пример можно без проблем адаптировать под управляемое приложение, на работе компоненты это никак на скажется.
Стандартный вопрос по ВК: исходники?
Как посмотреть исходный код ВК?
objShell = Новый COMОбъект(«WScript.Shell»);
sReturn = objShell.Run(«ping -n 1 8.8.8.8», 0, TRUE);
Если sReturn=0 Тогда
ВсеХорошо=Истина;
КонецЕсли;
(1) Пока выкладывать не буду
(2) Без исходников, наверное ни как…
(3) В данном случае использование COM-объектов не обязательно, прочитайте в справке про ЗапуститьПриложение, там через последний параметр можно код возврата так же получить
Под капотом, судя по кодам возврата, просто вызов IcmpSendEcho из icmp.dll ?
Если так, то почему сразу не выбрать что-то кроссплатформенное?
(7) Да, все верно. Будет время, ради интереса, попробую сделать что нибудь кроссплатформенное…
(7) В общем, согласен. Какой смысл хвастаться отказом от СОМ-объектов, если используется другой окно-компонент.
(9) Что такое окно-объект? icmp.dll файл системной библиотеки Windows, по сути, является частью WinAPI и в данном случае, COM-технология не используется. Как по мне, то с COM-объектами на порядок больше проблем случается. Возможно я в чем то не прав, но уж точно не хвастаюсь, а пытаюсь объективно оценить преимущества компоненты.
14 плюсов? Укуси меня пчела, если после отпуска не выложу такую же с исходниками и кроссплатформенную!
Не требуется наличие программы ping.exe;
🙂
Я чего-то не понимаю? Есть какие-то проблемы с ее наличием?
(11) Если Вы пишите грамотный код на С++, делаете ВК под 32, 64 бита, линукс и браузеры Хром и Фаерфокс, то даже при простейшем функционале исходный код компоненты, который может собрать любой 1Сник принесет Вам очень много плюсов и СМ.
(13) Вам так кажется. Просто сравните рейтинг его статьи про tool1CD (а там очень большая работа проведена) и рейтинга статей одного популярного в последнее время оконных дел мастера.
(14) Странно судить о нужности вещи по ее сложности
(11) Ждем с нетерпением, будет очень интересно!
(12) Кто сталкивался тот поймет
(16) Так не сталкивался поэтому не понимаю и спрашиваю, в каком случае её может не быть?
(15) Так не про нужность комментарий был. Человек сказал, что достаточно запостить ВК любого минимального функционала в качественном исполнении: CI, исходники, документация — и море плюсов обеспечено. Я резонно возразил.
(18) Программа ping, tracert ipconfig отсутствуют по-умолчанию в некоторых установках 64 битной windows 7. Да, их можно доустановить, но при этом требуется дистрибутив 🙂 Сталкивался с этой фигней.
(11) Ну, тогда уж заморочтесь сразу на проверку открытости порта TCP/IP тогда можно будет проверять доступность samba-шар, web, ftp, sftp, smtp серверов для обмена.
(10) Окно — Window.
(20) Отличный пример, а еще бывает, что у текущего пользователя ОС нет прав на запуск многих приложений, в том числе ping’а, а ещё, а ещё, а ещё 100500 ситуаций при которых ping.exe может не работать…
(20) (22) Спасибо 🙂