Esse aqui é um pequeno CGI que permite a execução de alguns comandos Linux/Unix via Web. Ele não se preocupa muito com aspectos de segurança e afins, portanto, certifique-se que isso não possa lhe causar problemas. Para esse código funcionar é só ter um servidor Web rodando com permissão para executar CGI. Além disso você precisará do Python (lógico), Nmap, Traceroute e do Ping. Ele também funciona apenas em sistemas Unix-like e serve para demonstrar alguns macetes sobre algumas chamadas do sistema. Eu utilizei esse método no lugar do {{{os.popen()}}} pois quando o CGI 'morre' (cliente clica no 'Parar' do navegador) o processo filho também morre. Com o {{{os.popen()}}} isso não aconteceria. == Código == {{{ #!python #!/usr/bin/env python import os import sys import cgi import re def header(): print """
Error: invalid ip address
" return if form.has_key('command'): print "Error: invalid command
" return def footer(): print "" print "" def do_command(cmd, ip): print "teste" if cmd == 'ping': p = '/bin' c = 'ping' elif cmd == 'traceroute': p = '/usr/sbin' c = 'traceroute' elif cmd == 'nmap': p = '/usr/bin' c = 'nmap' else: return 0 try: pid, fd = os.forkpty() except: sys.stderr.write("cannot fork()\n") sys.exit(1) if pid == 0: os.execv("%s/%s" % (p, c), [c] + [ip]) sys.exit(0) print "" buffer = "" while 1: try: data = os.read(fd, 32) except: break buffer = buffer + data res = buffer.split("\n", 1) if len(res) != 2: continue line, buffer = res line = line.strip() print "%s" % (line) sys.stdout.flush() print "" os.close(fd) return 1 if __name__ == '__main__': print "Content-type: text/html\n" main() }}} Volta para CookBook.