• HTTP监视网络


    import BaseHTTPServer, shutil, os
    from cStringIO import StringIO
    class MyHTTPRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):
        #The http path we service and the command we service
        cmds = {'/ping':'ping www.thinkware.se',
                '/netstat': 'netstat -a',
                '/tracert': 'tracert www.thinkware.se',
                '/srvstats': 'net statistics server',
                '/wsstats': 'net statistics workstation',
                '/route': 'route print',
                }
    
        def do_GET(self):
            """service a GET request"""
            f = self.send_head()
            if f:
                f = StringIO()
                machine = os.popen('hostname').readlines()[0]
                if self.path == '/':
                    heading = "Select a command to run on %s" %(machine)
                    body = ( self.getMenu() + "<p> The screen won't update until the selected" "command has finished. Please be patient.")
                else:
                    heading = "Execution of ''%s'' on %s" %( self.cmds[self.path], machine)
                    cmd = self.cmds[self.path]
                    body = '<a href="/">Main Menu&lt;/a&gt;<pre>%s</pre>\n' %  os.popen(cmd).read()
                    body = body.decode('cp437').encode('latin1')
                f.write("<html><head><title>%s</title></head>\n" %heading)
                f.write('<body><H1>%s</H1>\n' %(heading))
                f.write(body)
                f.write('</body></html>\n')
                f.seek(0)
                self.copyfile(f, self.wfile)
                f.close()
    
            return f
        
        def do_HEAD(self):
            """service a head request"""
            f = self.send_head()
            if f:
                f.close()
    
        def send_head(self):
            path = self.path
            if not path in ['/'] + self.cmds.keys():
                head = 'Command "%s" not found. Try one of three:<ul>' %path
                msg = head + self.getMenu()
                self.send_error(404, msg)
                return None
            self.send_response(200)
            self.send_header("Content-type", 'text/html')
            self.end_headers()
            f = StringIO()
            f.write("A test %s \n" % self.path)
            f.seek(0)
            return f
    
        def getMenu(self):
            keys = self.cmds.keys()
            keys.sort()
            msg = []
            for k in keys:
                msg.append('<li><a href = "%s"> %s => %s&lt;/a&gt;</li>' %(k, k, self.cmds[k]))
            msg.append('</ul>')
            return "\n".join(msg)
    
        def copyfile(self, source, outputfile):
            shutil.copyfileobj(source, outputfile)
    
    def main(HandleClass = MyHTTPRequestHandler, ServerClass = BaseHTTPServer.HTTPServer):
        BaseHTTPServer.test(HandleClass, ServerClass)
    
    if __name__ == '__main__':
        main()

    运行输出:

    Serving HTTP on 0.0.0.0 port 8000 ...
    localhost.localdomain - - [25/Aug/2012 01:14:18] "GET / HTTP/1.1" 200 -
    localhost.localdomain - - [25/Aug/2012 01:14:18] code 404, message Command "/favicon.ico" not found. Try one of three:<ul><li><a href = "/netstat"> /netstat => netstat -a&lt;/a&gt;</li>
    <li><a href = "/ping"> /ping => ping www.thinkware.se&lt;/a&gt;</li>
    <li><a href = "/route"> /route => route print&lt;/a&gt;</li>
    <li><a href = "/srvstats"> /srvstats => net statistics server&lt;/a&gt;</li>
    <li><a href = "/tracert"> /tracert => tracert www.thinkware.se&lt;/a&gt;</li>
    <li><a href = "/wsstats"> /wsstats => net statistics workstation&lt;/a&gt;</li>
    </ul>
    localhost.localdomain - - [25/Aug/2012 01:14:18] "GET /favicon.ico HTTP/1.1" 404 -
    localhost.localdomain - - [25/Aug/2012 01:14:20] "GET /netstat HTTP/1.1" 200 -
    localhost.localdomain - - [25/Aug/2012 01:14:20] code 404, message Command "/favicon.ico" not found. Try one of three:<ul><li><a href = "/netstat"> /netstat => netstat -a&lt;/a&gt;</li>
    <li><a href = "/ping"> /ping => ping www.thinkware.se&lt;/a&gt;</li>
    <li><a href = "/route"> /route => route print&lt;/a&gt;</li>
    <li><a href = "/srvstats"> /srvstats => net statistics server&lt;/a&gt;</li>
    <li><a href = "/tracert"> /tracert => tracert www.thinkware.se&lt;/a&gt;</li>
    <li><a href = "/wsstats"> /wsstats => net statistics workstation&lt;/a&gt;</li>
    </ul>
    localhost.localdomain - - [25/Aug/2012 01:14:20] "GET /favicon.ico HTTP/1.1" 404 -
    localhost.localdomain - - [25/Aug/2012 01:14:32] code 404, message Command "/favicon.ico" not found. Try one of three:<ul><li><a href = "/netstat"> /netstat => netstat -a&lt;/a&gt;</li>
    <li><a href = "/ping"> /ping => ping www.thinkware.se&lt;/a&gt;</li>
    <li><a href = "/route"> /route => route print&lt;/a&gt;</li>
    <li><a href = "/srvstats"> /srvstats => net statistics server&lt;/a&gt;</li>
    <li><a href = "/tracert"> /tracert => tracert www.thinkware.se&lt;/a&gt;</li>
    <li><a href = "/wsstats"> /wsstats => net statistics workstation&lt;/a&gt;</li>
    </ul>
    localhost.localdomain - - [25/Aug/2012 01:14:32] "GET /favicon.ico HTTP/1.1" 404 -
    localhost.localdomain - - [25/Aug/2012 01:14:34] "GET /ping HTTP/1.1" 200 -

  • 相关阅读:
    Linux使用lrzsz上传下载文件
    开发Wordpress主题时没有特色图片的功能
    Windows10重启之后总是将默认浏览器设置为IE
    C#泛型类的类型约束
    CentOS给网站配置Https证书
    从微软官网下载VS离线安装包的方法
    Azure Sql Database为某个数据库创建单独的访问账户
    VS2017/2019 Product Key
    VMware Workstation/Fusion 14/15 密钥
    将DataTable进行分页并生成新的DataTable
  • 原文地址:https://www.cnblogs.com/hzhida/p/2655592.html
Copyright © 2020-2023  润新知