Привет, незнакомец!

Похоже, вы здесь новенький. Чтобы принять участие, нажмите одну из кнопок ниже!

Python: Проверить доступность устройств по сети.

отредактировано марта 2016 Раздел: Мониторинг сети
Есть список ip/dns сетевых устройств.
Хочется при запуске ptyhon скрипта проверить какие живые.

Пока вижу два варианта:
пингом

import os
response = os.system("ping -c 1 " + host)
if response == 0:
print hostname, 'is up!'
else:
print hostname, 'is down!'


попыткой подключиться на tcp 22

import socket;
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
result = sock.connect_ex(('127.0.0.1',80))
if result == 0:
print "Port is open"
else:
print "Port is not open"


Ну и тот или другой в Thread'ы запихнуть.
Но работает это прямо скажем не быстро.
Может кто подскажет какие еще варианты есть?
Тэги темы:

Комментарии

  • отредактировано марта 2016
    можно так же использовать multiprocessing.
    Навскидку набросал пример:

    import os
    import multiprocessing

    devices = ['192.168.100.1', '192.168.88.155']

    def ping(host,mp_queue):
    response = os.system("ping -c 1 " + host)
    if response == 0:
    print host, 'is up!'
    result = True
    else:
    print host, 'is down!'
    result = False
    dostupnost = {host:result}
    mp_queue.put(dostupnost)

    def worker(devices):
    mp_queue = multiprocessing.Queue()
    processes = []
    for device in devices:
    p = multiprocessing.Process(target=ping, args=(device, mp_queue))
    processes.append(p)
    p.start()
    for p in processes:
    p.join()
    results = []
    for p in processes:
    results.append(mp_queue.get())
    return results

    Это так наводка)

    Отступы, к сожалению, съезжают при публикации сообщения
  • Попробуй с ключами ping (Linux):
    -i интервал. Интервал в секундах между отправкой пакетов. По умолчанию между отправкой пакетов делается пауза в 1 секунду, либо, в случае лавинообразного режима, отправка производится без пауз. Задавать значения меньше 0.2 может только суперпользователь.

    Таким образом при использовании ключа " -i 0.2 " будет работать быстрее.
  • отредактировано марта 2016
    kay1922 написал:

    можно так же использовать multiprocessing.
    Отступы, к сожалению, съезжают при публикации сообщения

    Ваш вариант, только с subprocess (настоятельно рекомендуют его использовать, вместо os.system)
    http://pastebin.com/0wUQJxSG

    И можно так (немного поменяла вывод, чтобы сразу получать два списка: доступных и недоступных устройств)
    http://pastebin.com/eheN9SZJ
  • Natasha написал:


    И можно так (немного поменяла вывод, чтобы сразу получать два списка: доступных и недоступных устройств)
    http://pastebin.com/eheN9SZJ

    Красиво :)

    Спасибо всем отписавшимся :)
  • можно сделать вот примерно так. загружать файл а адресами из списка, и проверять их nmap'ом. полученный результат писать в файл.

    http://pastebin.com/5WAE7ycC
  • Если уж nmap, то тогда наверно эту библиотеку юзать.
  • Для пинга можно использовать нативный питоновский пинг
    https://github.com/l4m3rx/python-ping
Войдите или Зарегистрируйтесь чтобы комментировать.