设为首页 加入收藏

TOP

Python 用socket模块实现检测端口和检测web服务(一)
2014-11-24 03:17:14 来源: 作者: 【 】 浏览:6
Tags:Python socket 模块 实现 检测 web 服务

检测端口


check_tcp_port.py


#!/usr/bin/env python


import socket


import re


import sys


def check_server(address, port):


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)


return True


except socket.error, e:


print "Connection to %s on port %s failed: %s" % (address, port, e)


return False


if __name__ == '__main__':


from optparse import OptionParser


parser = OptionParser()


parser.add_option("-a", "--address", dest="address", default="localhost", help="ADDRESS for server", metavar='ADDRESS')


parser.add_option("-p", "--port", dest="port", type="int", default=80, help="PORT for server", metavar="PORT")


(options, args) = parser.parse_args()


print 'options: %s, args: %s' %(options, args)


check = check_server(options.address, options.port)


print 'check_server returned %s' % check


sys.exit(not check)



运行结果:


端口在监听


options: {'port': 22, 'address': '192.168.137.2'}, args: []


Attempting to connect to 192.168.137.2 on port 22


Connected to 192.168.137.2 on port 22


check_server returned True


端口不在监听


[root@centos python]# python check_tcp_port.py -a 192.168.137.2 -p 36


options: {'port': 36, 'address': '192.168.137.2'}, args: []


Attempting to connect to 192.168.137.2 on port 36


Connection to 192.168.137.2 on port 36 failed: [Errno 111] Connection refused


check_server returned False


检测web服务


check_web.py


#!/usr/bin/env python


import socket


import re


import sys


def check_webserver(address, port, resource):


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


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)


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:


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, Stuats: %s, Message: %s' %(version, status, message)


except ValueError:


print 'Failed to split status line'


return False


if status in ['200', '301']:


print 'Success - status was %s' %status


return True


else:


print 'Staus 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)


首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Python 重定向shell执行输出 下一篇Python 发送email

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·常用meta整理 | 菜鸟 (2025-12-25 01:21:52)
·SQL HAVING 子句:深 (2025-12-25 01:21:47)
·SQL CREATE INDEX 语 (2025-12-25 01:21:45)
·Shell 传递参数 (2025-12-25 00:50:45)
·Linux echo 命令 - (2025-12-25 00:50:43)