基于socket 的web服务器检测
2012-08-17 02:00
316 查看
#!/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
相关文章推荐
- TCP/IP协议学习(七) 基于C# Socket的Web服务器---动态通讯实现
- 【简单Web服务器搭建】基于Socket实现的最简单的Web服务器【ASP.NET原理分析】
- 【转】【简单Web服务器搭建】基于Socket实现的最简单的Web服务器【ASP.NET原理分析】
- 基于web的服务器push技术:comet vs websocket
- 利用socket自己实现基于HTTP协议的Web服务器
- 【简单Web服务器搭建】基于Socket实现的最简单的Web服务器【ASP.NET原理分析】
- 【简单Web服务器搭建】基于Socket实现的最简单的Web服务器【ASP.NET原理分析】
- 【Web后端笔记】基于Socket实现的简单Web服务器搭建
- 【简单Web服务器搭建】基于Socket实现的最简单的Web服务器【ASP.NET原理分析】
- 基于Socket编程实现一个简单的Web服务器
- python 用socket模块实现检测端口和检测web服务
- web服务器原理解释——基于Java的简单服务器实例
- 构建基于Nginx的web服务器
- 新写了一个Web即时通程序,基于HTTP长连接的服务器推技术。
- 基于tcp或者UDP socket 情况下服务器客户端并发操作
- LAMP构建----基于FCGI的轻量级WEB服务器全手动编译安装
- 基于花生棒在windows下小团队软件开发及web演示服务器的搭建
- 基于Boa-web服务器的远程机器人控制(网络篇)
- 基于Socket通信的BS结构文件服务器客户端的简易程序(1)