本文共 4693 字,大约阅读时间需要 15 分钟。
以下脚本用于检测指定IP地址和端口是否在监听状态。
#!/usr/bin/env pythonimport socketimport reimport sysdef 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 finally: s.close()if __name__ == '__main__': from optparse import OptionParser parser = OptionParser() parser.add_option("-a", "--address", dest="address", default="localhost", help="服务器IP地址", metavar='ADDRESS') parser.add_option("-p", "--port", dest="port", type="int", default=80, help="服务器端口", metavar="PORT") options, args = parser.parse_args() print("options: %s, args: %s" % (options, args)) check = check_server(options.address, options.port) print("check_server返回状态:%s" % check) sys.exit(not check) 端口在监听
[root@CentOS python]# python check_tcp_port.py -a 192.168.137.2 -p 22options: {'port': 22, 'address': '192.168.137.2'}, args: []Attempting to connect to 192.168.137.2 on port 22Connected to 192.168.137.2 on port 22check_server返回状态:True端口不在监听
[root@centos python]# python check_tcp_port.py -a 192.168.137.2 -p 36options: {'port': 36, 'address': '192.168.137.2'}, args: []Attempting to connect to 192.168.137.2 on port 36Connection to 192.168.137.2 on port 36 failed: [Errno 111] Connection refusedcheck_server返回状态:False以下脚本用于检测指定IP地址和端口的Web服务器是否正常运行,并验证其返回的状态码。
#!/usr/bin/env pythonimport socketimport reimport sysdef 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请求内容:") print("|||%s|||" % request_string) s = socket.socket() print("尝试连接到 %s on port %s" % (address, port)) try: s.connect((address, port)) print("已连接到 %s on port %s" % (address, port)) s.send(request_string) rsp = s.recv(100) print("接收到的HTTP响应内容:") print("|||%s|||" % rsp) lines = rsp.splitlines() print("HTTP响应的第一行:%s" % lines[0]) try: version, status, message = re.split(r'\s+', lines[0], 2) print("版本:%s, 状态码:%s, 消息:%s" % (version, status, message)) if status in ['200', '301']: print("成功响应,状态码为:%s" % status) return True else: print("响应状态码为:%s" % status) return False except ValueError: print("无法解析HTTP状态码") return False except socket.error, e: print("连接到 %s on port %s失败:%s" % (address, port, e)) return False finally: s.close() return Falseif __name__ == '__main__': from optparse import OptionParser parser = OptionParser() parser.add_option("-a", "--address", dest="address", default="localhost", help="目标Web服务器IP地址", metavar="ADDRESS") parser.add_option("-p", "--port", dest="port", type="int", default=80, help="目标Web服务器端口", metavar="PORT") parser.add_option("-r", "--resource", dest="resource", default="index.html", help="要检测的资源路径", metavar="RESOURCE") options, args = parser.parse_args() print("选项:%s, 参数:%s" % (options, args)) check = check_webserver(options.address, options.port, options.resource) print("check_webserver返回状态:%s" % check) sys.exit(not check) 正常响应
[root@centos python]# python check_web.py -a 192.168.137.2 -p 80 -r index.htmloptions: {'resource': 'index.html', 'port': 80, 'address': '192.168.137.2'}, args: []HTTP请求内容:|||GET /index.html HTTP/1.1|Host: 192.168.137.2||||尝试连接到 192.168.137.2 on port 80已连接到 192.168.137.2 on port 80接收到的HTTP响应内容:|||HTTP/1.1 200 OK|Date: Wed, 19 Jun 2013 02:29:31 GMT|Server: Apache/2.2.3 (CentOS)|Last-Modified: |||Closing the connectionHTTP响应的第一行:HTTP/1.1 200 OK版本:HTTP/1.1, 状态码:200, 消息:OK成功响应,状态码为:200check_webserver返回状态:True资源未找到
[root@centos python]# python check_web.py -a 192.168.137.2 -p 80 -r ppp.htmloptions: {'resource': 'ppp.html', 'port': 80, 'address': '192.168.137.2'}, args: []HTTP请求内容:|||GET /ppp.html HTTP/1.1|Host: 192.168.137.2||||尝试连接到 192.168.137.2 on port 80已连接到 192.168.137.2 on port 80接收到的HTTP响应内容:|||HTTP/1.1 404 Not Found|Date: Wed, 19 Jun 2013 02:29:41 GMT|Server: Apache/2.2.3 (CentOS)|Content-|||Closing the connectionHTTP响应的第一行:HTTP/1.1 404 Not Found版本:HTTP/1.1, 状态码:404, 消息:Not Found状态码为:404check_webserver返回状态:False转载地址:http://gplfk.baihongyu.com/