from
optparse
import
OptionParser
import
socket
import
sys
import
re
from
StringIO
import
StringIO
class
check_server:
def
__init__(
self
,address,port,resource):
self
.address
=
address
self
.port
=
port
self
.resource
=
resource
def
check(
self
):
if
not
self
.resource.startswith(
'/'
):
self
.resource
=
'/'
+
self
.resource
request
=
"GET %s HTTP/1.1\r\nHost:%s\r\n\r\n"
%
(
self
.resource,
self
.address)
s
=
socket.socket()
s.settimeout(
10
)
print
"现在开始对 %s 上的 %s 端口连接......"
%
(
self
.address,
self
.port)
try
:
s.connect((
self
.address,
self
.port))
print
"连接 %s 上端口 %s 成功"
%
(
self
.address,
self
.port)
s.send(request)
response
=
s.recv(
100
)
except
socket.error,e:
print
"连接%s 上端口 %s 失败 ,原因为:%s"
%
(
self
.address,
self
.port,e)
return
False
finally
:
print
"关闭连接"
s.close()
line
=
StringIO(response).readline()
try
:
(http_version,status,messages)
=
re.split(r
'\s+'
,line,
2
)
except
ValueError:
print
"分割响应码失败"
return
False
print
"返回的状态码是%s"
%
(status)
if
status
in
[
'200'
,
'301'
,
'302'
]:
print
"服务器的监控状况良好"
else
:
print
"乖乖,赶快上线看看,咋回事"
if
__name__
=
=
'__main__'
:
parser
=
OptionParser()
parser.add_option(
"-a"
,
"--address"
,dest
=
"address"
,default
=
'localhost'
,
help
=
"要检查主机的地址或者主机名"
)
parser.add_option(
'-p'
,
'--port'
,dest
=
"port"
,
type
=
int
,default
=
80
,
help
=
"要检查主机的端口"
)
parser.add_option(
'-r'
,
'--resource'
,dest
=
"resource"
,default
=
"/"
,
help
=
"要检查的资源,比如"
)
(options,args)
=
parser.parse_args()
checks
=
check_server(options.address,options.port,options.resource)
checks.check()