博客
关于我
python中用socket检测端口_Python 用socket模块实现检测端口和检测web服务
阅读量:797 次
发布时间:2023-03-09

本文共 4693 字,大约阅读时间需要 15 分钟。

用socket模块实现检测端口和检测Web服务

检测端口

检测TCP端口监听情况

以下脚本用于检测指定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

检测Web服务

检查Web服务器状态

以下脚本用于检测指定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/

你可能感兴趣的文章
Python—面向对象2
查看>>
Python“和“带整数的运算符
查看>>
Python“文件存在“制作目录时出错
查看>>
Python“文件存在“制作目录时出错
查看>>
Python、IMAP 和 GMail.将消息标记为已查看
查看>>
python一个一个获取迭代器的元素
查看>>
python一维数组 提取_python – 如何从numpy中的1维数组中提取零维切片
查看>>
python三大库之--numpy(一)
查看>>
python三大库之--numpy(二)
查看>>
python上的字无效字符_标识中的无效字符
查看>>
python下用decode和encode 中文转码
查看>>
Python下调用Linux的Shell命令
查看>>
Python接口自动化测试实战系列
查看>>
python下载_安装_配置_以及第一行python程序---python工作笔记009
查看>>
Python不协调机器人消息.内容
查看>>
Python与C#之间内存共享互传信息
查看>>
python与c语言混合编程_你试过C语言和Python一起混合编程吗?两者相加不是已经无敌了!...
查看>>
python与excel
查看>>
Python与Excel的完美邂逅:深入浅出,手把手教你轻松玩转Excel数据操作
查看>>
python与flask_Python编程中flask的简介与简单使用
查看>>