@Dango45

Как проверить запущен ли сервер или нет по его IP адресу на Python?

Здравсвтуйте! Как можно проверить запущен ли сервер на Python? Пробовал через pythonping но он разному выдает, иногда сервер доступен иногда нет, хотя сервер всегда включен.
Пробовал
код
import pythonping as ping
req = ping("Какой то айпи", verbose=False, timeout=20)
  • Вопрос задан
  • 1272 просмотра
Пригласить эксперта
Ответы на вопрос 3
@whoiam_frontend
Python-разработчик
Для того чтобы проверить существует ли сервер и запущен ли он, можно использовать модуль `socket` в Python. Вот пример функции, которая с помощью `socket` и `try`/`except` проверяет доступность указанного IP-адреса как сервера:

python
import socket

def check_server(ip, port):
    # создаем объект socket
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    try:
        # подключаемся к серверу
        s.connect((ip, port))
        # закрываем соединение
        s.shutdown(socket.SHUT_RDWR)
        return True
    except:
        return False
    finally:
        s.close()


Вы можете передать функции IP-адрес и порт сервера, который хотите проверить. Если сервер доступен, функция вернет `True`, в противном случае - `False`. Вы можете использовать эту функцию в любых ваших скриптах, чтобы проверить доступность сервера по его IP-адресу и порту.
Ответ написан
Комментировать
trapwalker
@trapwalker Куратор тега Python
Программист, энтузиаст
Обычно доступность и работоспособность сервера проверяют подключаясь к нему и делая тестовый запрос. В некоторых API для этого есть спецальные точки входа, которые диагностируют и вовзвращают статус работоспособности сервера. Если это веб-сервер, то нужно лишь сделать get-запрос к такому методу. Если это ваш сервер, то вы можете сами реализовать такой метод, если чужой и у него нет такого метода, то можете проверять факт наличия сервера по возможнсти подключиться к порту, на котором он поднят.
Сделать это можно и без вского питона из командой строки, например с помощью
telnet <ip> <port>.
Выдаст ошибку, если подключение не удалось. Как подключиться к порту из питона вам уже показали в соседнем ответе, но, думаю, если поискать, то найдётся пачка готовых библиотек для того же самого.
Ответ написан
Комментировать
Vindicar
@Vindicar
RTFM!
Пинг проверяет доступность целевого узла из данного узла.
Если по какой-то причине нет связности между двумя узлами, или если машина настроена не отвечать на пинг, или какой-то из промежуточных узлов режет ICMP трафик, ты ответа не получишь, даже если сервер будет активен.

Кроме того, машина может быть активна и отвечать на пинг, но если сервис (программа), которая тебе нужна, не запущена, ты тоже получишь ложный результат.

Я бы пытался подключиться к серверу по требуемому тебе протоколу, и судил по этому.
А если сервер тебе подконтролен - оцени возможность использования существующих средств мониторинга, прежде чем писать свои.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы