zoukankan      html  css  js  c++  java
  • 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 -

  • 相关阅读:
    C# for VS foreach 性能对比
    C# D3D中2D的使用,做小游戏。。。。半年前写的东西了,拿出来分享,现在看来代码写的乱七八糟的,将就一下吧。。。
    传奇3(G) 国际服 地图 显示 C#代码实现(地表草皮显示基本没有问题,但地面对象显示混乱)
    IE6和Opera position:absolute; 子元素浮动 width:100%;显示不正确问题。。。
    .NET Framework 4 文件IO读写的增强 激动人心的强大 或许正是你所期待的 基类库中的新增内容 转自msdn杂志
    VirtualBox 系统盘 虚拟磁盘 变大?
    假如你是ASP.NET 中手,个团队邀请你加入他们,没有工资(至少要等到项目卖出去,交付)[问题点数:100分] 创业号召贴,发帖保存
    对于C#的一些奢望(对微软的一种幻想,对ASP.NET,WEB,计算机,.NET,以及一些现状的抱怨)
    实例化 泛型 对象
    基于权值的微博用户采样算法研究
  • 原文地址:https://www.cnblogs.com/hzhida/p/2655592.html
Copyright © 2011-2022 走看看