Запустить скрипт на любом сетевом соединении - PullRequest
3 голосов
/ 04 января 2010

В linux (ubuntu) возможно ли выполнить скрипт при любом входящем сетевом соединении?

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

Я исследовал эту проблему и пока не нашел подходящего решения, любая помощь приветствуется.

Neil

Примечание: я знаю, что останавливать / запускать массив необязательно, и есть недостатки (износ диска ...). Тем не менее, я настроен по-своему, пожалуйста, не размещайте посты с советами не останавливать / запускать диски.

Редактировать (1):

Думаю, я поделюсь своим мнением и, надеюсь, получу отзывы.

Я думаю, что мне нужно было бы использовать связывание xinetd сценария catcher , который собирает данные входящего соединения на всех портах, запускает мой сценарий launch и передает данные входящего соединения соответствующему сервис для этого порта. Единственная проблема заключается в том, что я не знаю, какие данные мне нужно перехватить или как это сделать в python.

Редактировать (2): Я взломал решение, используя библиотеку python pypcap http://code.google.com/p/pypcap/. Для дальнейшего использования вот код.

import pcap
...

pc = pcap.pcap(name)
    pc.setfilter(' '.join(args))
 pc.setnonblock()

 try:
        for ts, pkt in pc:
   # subprocess.call([filename, args])
   print 'readying disks...'
   break
 except OSError, ValueError:
  print 'Error: invalid arguements passed to subprocess'
    except KeyboardInterrupt:
        print 'Error: keyboard interupt'

1 Ответ

1 голос
/ 04 января 2010

Посмотрите на netfilter / iptables. Возможно, вы сможете написать код для использования библиотек API пространства пользователя для обнаружения событий входящих пакетов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...