您的位置:首页 > 其它

基于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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: