博客
关于我
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:XPath 在 ElementTree 中不可用
查看>>
Python:从 FTP 服务器下载文件
查看>>
python:从列表中创建元组列表
查看>>
Python:从嵌套列表中删除重复项
查看>>
Python:从间隔映射到值
查看>>
Python:使用 shell=False 的子进程调用不起作用
查看>>
Python:修改 PATH 环境变量的平台无关方式
查看>>
Python:假与 0
查看>>
Python:函数使用
查看>>
Python:函数进阶
查看>>
Python:在整数的二进制表示中查找最长的二进制间隙
查看>>
Python:如何从二进制转换为 base 64 并返回?
查看>>
Python:如何以非阻塞方式读取子进程的标准输出
查看>>
Python:如何使用 plotly 制作阴影区域或交替背景颜色?
查看>>
Python:如何根据日期时间获取值的计数
查看>>
python:如何检测串行 COM 上的设备名称/ID
查看>>
Python:如何模拟 datetime.utcnow()?
查看>>
Python:如果DataFrames之间的其他值匹配,则对DataFrame中的值求和
查看>>
Python:字典思维
查看>>
Python:将 HEX 字符串转换为字节
查看>>