Внешняя компонента для ping’а

Внешняя компонента для выполнения ping’а из 1С:Предприятия 8.

Внешняя компонента для тех, кто не хочет использовать для пинга программу ping.exe или WMI. С помощью компоненты можно проверить доступность соединения с хостом в сети по протоколу ICMP.
Преимущества: 

  1. Не требуется наличие программы ping.exe;
  2. Не требуется наличие COM-объектов;
  3. Не требуется наличие прав администратора;
  4. Удобно работать с результатом выполнения;

Недостатки:

  1. Нет поддержки IPv6;
  2. Нет поддержки Linux;
  3. Возможно еще куча др. недостатков о которых я не подумал…

Для работы компоненты требуется библиотека 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.

В качестве примера представлена обработка для обычного приложения с внешней компонентой. Пример можно без проблем адаптировать под управляемое приложение, на работе компоненты это никак на скажется.

24 Comments

  1. Infactum

    Стандартный вопрос по ВК: исходники?

    Reply
  2. saa@kuzov.org

    Как посмотреть исходный код ВК?

    Reply
  3. MalginD

    objShell = Новый COMОбъект(«WScript.Shell»);

    sReturn = objShell.Run(«ping -n 1 8.8.8.8», 0, TRUE);

    Если sReturn=0 Тогда

    ВсеХорошо=Истина;

    КонецЕсли;

    Reply
  4. frkbvfnjh

    (1) Пока выкладывать не буду

    Reply
  5. frkbvfnjh

    (2) Без исходников, наверное ни как…

    Reply
  6. frkbvfnjh

    (3) В данном случае использование COM-объектов не обязательно, прочитайте в справке про ЗапуститьПриложение, там через последний параметр можно код возврата так же получить

    Reply
  7. Infactum

    Под капотом, судя по кодам возврата, просто вызов IcmpSendEcho из icmp.dll ?

    Если так, то почему сразу не выбрать что-то кроссплатформенное?

    Reply
  8. frkbvfnjh

    (7) Да, все верно. Будет время, ради интереса, попробую сделать что нибудь кроссплатформенное…

    Reply
  9. Артано

    (7) В общем, согласен. Какой смысл хвастаться отказом от СОМ-объектов, если используется другой окно-компонент.

    Reply
  10. frkbvfnjh

    (9) Что такое окно-объект? icmp.dll файл системной библиотеки Windows, по сути, является частью WinAPI и в данном случае, COM-технология не используется. Как по мне, то с COM-объектами на порядок больше проблем случается. Возможно я в чем то не прав, но уж точно не хвастаюсь, а пытаюсь объективно оценить преимущества компоненты.

    Reply
  11. baton_pk

    14 плюсов? Укуси меня пчела, если после отпуска не выложу такую же с исходниками и кроссплатформенную!

    Reply
  12. YanTsys
    Преимущества:

    Не требуется наличие программы ping.exe;

    🙂

    Я чего-то не понимаю? Есть какие-то проблемы с ее наличием?

    Reply
  13. saa@kuzov.org

    (11) Если Вы пишите грамотный код на С++, делаете ВК под 32, 64 бита, линукс и браузеры Хром и Фаерфокс, то даже при простейшем функционале исходный код компоненты, который может собрать любой 1Сник принесет Вам очень много плюсов и СМ.

    Reply
  14. Infactum

    (13) Вам так кажется. Просто сравните рейтинг его статьи про tool1CD (а там очень большая работа проведена) и рейтинга статей одного популярного в последнее время оконных дел мастера.

    Reply
  15. frkbvfnjh

    (14) Странно судить о нужности вещи по ее сложности

    Reply
  16. frkbvfnjh

    (11) Ждем с нетерпением, будет очень интересно!

    Reply
  17. frkbvfnjh

    (12) Кто сталкивался тот поймет

    Reply
  18. YanTsys

    (16) Так не сталкивался поэтому не понимаю и спрашиваю, в каком случае её может не быть?

    Reply
  19. Infactum

    (15) Так не про нужность комментарий был. Человек сказал, что достаточно запостить ВК любого минимального функционала в качественном исполнении: CI, исходники, документация — и море плюсов обеспечено. Я резонно возразил.

    Reply
  20. viptextil1

    (18) Программа ping, tracert ipconfig отсутствуют по-умолчанию в некоторых установках 64 битной windows 7. Да, их можно доустановить, но при этом требуется дистрибутив 🙂 Сталкивался с этой фигней.

    Reply
  21. viptextil1

    (11) Ну, тогда уж заморочтесь сразу на проверку открытости порта TCP/IP тогда можно будет проверять доступность samba-шар, web, ftp, sftp, smtp серверов для обмена.

    Reply
  22. Неопределено

    (10) Окно — Window.

    Reply
  23. frkbvfnjh

    (20) Отличный пример, а еще бывает, что у текущего пользователя ОС нет прав на запуск многих приложений, в том числе ping’а, а ещё, а ещё, а ещё 100500 ситуаций при которых ping.exe может не работать…

    Reply
  24. YanTsys

    (20) (22) Спасибо 🙂

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *