zoukankan      html  css  js  c++  java
  • 基于socket 的web服务器检测

    #!/usr/bin/env python
    请参考http协议:
    import socket
    import re
    import sys
    
    def check_webserver(address, port, resource):
        #build up HTTP request string
        if not resource.startswith('/'):
            resource = '/' + resource
        request_string = "GET %s HTTP/1.1\r\nHost: %s\r\n\r\n" %(resource,address)
        print 'HTTP request:'
        print '|||%s|||' %request_string
        #create a TCP Socket
        s = socket.socket()
        print "Attempting to connect to %s on port %s" %(address,port)
        try:
            s.connect((address,port))
            print "Connected to %s on port %s" %(address, port)
            s.send(request_string)
            #we should only need the first 100 bytes or so
            rsp = s.recv(100)
            print 'Received 100 bytes of HTTP response'
            print '!!!%s|||' % rsp
        except socket.error, e:
            print "Connection to %s on port %s failed: %s " %(address,port,e)
            return False
        finally:
            #be a good citizen and close your connection
            print "Closing the connection"
            s.close()
        lines = rsp.splitlines()
        print 'First line of HTTP response: %s' %lines[0]
        try:
            version, status, message = re.split(r'\s+',lines[0],2)
            print 'Version:%s, Status:%s, Message:%s' %(version,status, message)
        except:
            print 'Failed to split status line'
            return False
        if status in ['200','301']:
            print 'Success -status was %s' %status
            return True
        else:
            print 'Status was %s' % status
            return False
    
    if __name__ == '__main__':
        from optparse import OptionParser
        parser = OptionParser()
        parser.add_option("-a","--address",dest="address",default='localhost',help="ADDRESS for webserver",metavar="ADDRESS")
        parser.add_option("-p","--port",dest="port", type="int",default=80,help="PORT for webserver",metavar="PORT")
        parser.add_option("-r","--resource",dest="resource",default='index.html',help="RESOURCE to check",metavar="RESOURCE")
        (options,args) = parser.parse_args()
        print 'options:%s, args:%s' %(options,args)
        check = check_webserver(options.address,options.port,options.resource)
        print 'check_webserver returned %s' %check
        sys.exit(not check)

    输出如下:
    hzhida@hzhida-TW9-SW9:~/python$ python httpcheck.py -r /zm/index.php
    options:{'resource': '/zm/index.php', 'port': 80, 'address': 'localhost'}, args:[]
    HTTP request:
    |||GET /zm/index.php HTTP/1.1
    Host: localhost
    
    |||
    Attempting to connect to localhost on port 80
    Connected to localhost on port 80
    Received 100 bytes of HTTP response
    !!!HTTP/1.1 200 OK
    Date: Thu, 16 Aug 2012 17:57:06 GMT
    Server: Apache/2.2.16 (Ubuntu)
    X-Powered-By: |||
    Closing the connection
    First line of HTTP response: HTTP/1.1 200 OK
    Version:HTTP/1.1, Status:200, Message:OK
    Success -status was 200
    check_webserver returned True
  • 相关阅读:
    建立文件类型关联
    Delphi程序员,你们现在还好吗?
    加一文档到开始菜单中的文件夹下
    文本转换为GIF
    取消文件类型的关联
    取得任务栏的高度
    TeeChart使用范例
    同步SQL Server服务器时间
    注册系统热键
    山西襄汾溃坝事故已造成259人死亡
  • 原文地址:https://www.cnblogs.com/hzhida/p/2643368.html
Copyright © 2011-2022 走看看