Дополнительно
Пингование серверов в Python
Есть ли в Python способ пинговать сервер через ICMP и возвращать TRUE, если сервер отвечает, или FALSE, если ответа нет?
150
20
Если вам не нужно поддерживать Windows, вот очень лаконичный способ сделать это:
Это работает, потому что ping возвращает ненулевое значение при неудачном соединении. (Возвращаемое значение на самом деле отличается в зависимости от сетевой ошибки.) Вы также можете изменить таймаут ping (в секундах) с помощью опции '-t'. Обратите внимание, что при этом будет выведен текст на консоль.
Эта функция работает в любой ОС (UNIX, Линукс, macOS, и для Windows) Python 2 и Python 3
Изменения: По @Раде
ОС.система "сменила" подпроцесс.вызов
. По @Борис документация рекомендует использоватьподпроцесса.выполнить()
Если вы'ре, используя Python 3.5+.Обратите внимание, что, по словам @ikrase на Windows, эта функция вернет
true
, если вы получаете ошибкихост назначения недоступен
.Объяснение
Команда "пинг" в Windows и Unix-подобных систем. Опция
-Н
(Windows) или-С
(в Unix) определяет количество пакетов, которое в данном примере было установлено значение 1.платформа
.системы()
возвращает имя платформы. Экс.'Дарвин'
на macOS.подпроцесса.звоните()
выполняет системный вызов. Экс.подпроцесса.вызов(['Общ','-Л'])
.Есть модуль, называемый pyping, что могу сделать это. Он может быть установлен с помощью pip
Он довольно прост в использовании, однако, при использовании этого модуля, вам нужен root-доступ из-за того, что крафт сырые пакеты под капотом.
Потому что мне нравится моя программа на Python универсальный на версии 2.7 и 3.X и на платформе Linux, Mac ОС и Windows, мне пришлось модифицировать существующие примеры.
Посмотрев вокруг, я закончил писать свой собственный модуль ping, которая предназначена для мониторинга большого количества адресов, является асинхронным и не'т использовать много системных ресурсов. Вы можете найти его здесь: https://github.com/romana/multi-ping/ это'ы Апач лицензирована, так что вы можете использовать его в ваш проект в любом случае вы посчитаете нужным.
Основными причинами внедрения мои ограничения и другие подходы:
Убедитесь, что pyping установлен или установить его, установите типун pyping
Для питон3 там's очень простой и удобный модуль Python ping3:
(типун установить ping3)
.Этот модуль позволяет настраивать некоторые параметры.
Я решаю это с:
"и ТТЛ" По есть способ узнать, если пинг будет правильно. Saludos
Программные пакеты ICMP пинг осложняется повышенными привилегиями, необходимые для отправки сырьевых ICMP-пакеты, и называть "пинг" бинарные некрасиво. Для мониторинга серверов, вы можете достичь того же результата с помощью метода, называемого TCP пинг:
Внутренне, это просто устанавливает TCP-соединение с целевым сервером и сразу же бросает его, измеряя время, прошедшее. Эта конкретная реализация будет немного ограничен в том, что он не'т обрабатывать закрытые порты, но для вашего собственного сервера он работает довольно хорошо.
Мои сокращения, используя идеи из ответов в этом посте, но только с использованием новых рекомендованный модуль подпроцесса и питон3:
Моя версия функции ping:
деф пинг(host_or_ip, пакеты=1, параметр timeout=1000): ''' системных вызовов и"пинг" и команда, возвращает true, если пинг проходит успешно. Обязательный параметр: host_or_ip (ул. адрес Хост на пинг) Дополнительные параметры: пакеты (в том числе, количество повторов), время ожидания (интервал, МС ждать ответ) Не показывает никаких выходных данных, либо в всплывающем окне или в командной строке. В Python 3.5+, Windows и Linux совместимо (Mac не проверял, должно работать) '''
Команда ping одинаков для Windows и Linux, за исключением "по-количество пакетов" и флаг.
`` Не стесняйтесь использовать его, как вам будет.
Этот скрипт работает на Windows, и должен работать на других операционных системах : Он работает на Windows, Debian, и на MacOSX, нужен тест на Солярис.
Я нашла этот вопрос по похожему сценарию. Я опробовал pyping но пример, приведенный Нэвин не't работа для меня в Windows под питона 2.7.
Пример, который работал для меня:
Через мульти-пин (
пункт Установить multiPing
) я сделал этот простой код (просто скопировать и вставить, если вы будете!):Использование:
Если вам нужен один образец, второй параметр " и
10
" могут быть проигнорированы!Надеюсь, что это помогает!
Здесь'ы решение с помощью Python's модуль `подпроцесса и инструмент командной строки на "пинг", предусмотренных на основную ОС. Проверено на Windows и Linux. Поддержка настройки сетевой тайм-аут. Не'т нужны root (по крайней мере, на Windows и Linux).
У меня было аналогичное требование, поэтому я реализовал ее так, как показано ниже. Это проверено на Windows 64 бит и Linux.
Если IP не доступен подпроцесса.check_output() вызывает исключение. Дополнительная проверка может быть сделано путем извлечения информации из выходной линии 'пакетов: отправлено = 2, получено = 2, потеряно = 0 (0% потерь)'.
Кажется достаточно простым, но дал мне подходит. Я продолжал получать "по протоколу ICMP открытые операции на сокете, не допускается" или другого решения бы повесить, если сервер был отключен. Если, однако, то, что вы хотите знать это, что сервер жив и работает веб-сервер на этом сервере, тогда завиток будет делать эту работу. Если у вас есть SSH и сертификаты, то SSH и простую команду хватит. Вот код: