在任何网络连接上启动脚本

时间:2010-01-04 18:16:00

标签: python linux ubuntu

在linux(ubuntu)上,是否可以在任何传入的网络连接上执行脚本?

在我的家庭服务器长时间不活动期间,我计划在遇到传入的网络连接时停止软件raid,停放数据磁盘并重新启动raid阵列。

我一直在研究这个问题,但还没有找到合适的解决方案,我们非常感谢任何帮助。

尼尔

注意:我知道停止/启动阵列是不可靠的,并且存在缺点(磁盘磨损和撕裂......)。但是我按照我的方式设置,请不要发布建议我不要停止/启动磁盘。

修改(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 个答案:

答案 0 :(得分:1)

看看netfilter / iptables。您可以编写代码来使用用户空间API库来检测传入的数据包事件。