博客
关于我
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两个版本共存时,命令行升级pip
查看>>
Python两个版本共存时,怎么验证是否安装成功 scrapy
查看>>
Python两个版本共存时,通过pip安装Scrapy
查看>>
python两组变量的相关关系散点图_变量是什么?变量间的两种关系——函数关系和相关关系(小学版)...
查看>>
Python中 pass语句的作用
查看>>
python中 urllib, urllib2, httplib, httplib2 几个库的区别
查看>>
python中 yaml库 & json库 & xmltodict库使用
查看>>
python中 将你的名字转化成为二进制并输出
查看>>
Python中*args 和**kwargs的用法
查看>>
Python中*args 和**kwargs的用法
查看>>
Python中*args和**kwargs的使用
查看>>
python中0、1、True、False、if条件
查看>>
python中argparse模块关于 parse_args() 函数详解(全)
查看>>
python中base64编码与解码
查看>>
python中break怎么用_详解Python中break语句的用法
查看>>
python中del函数的垃圾回收
查看>>
Python中DrissionPage的详细解析与实战
查看>>
python中enumerate、变量类型转换
查看>>
python中execute是啥_python – 为什么“c.execute(…)”打破循环?
查看>>
python中exit和break区别_Python中exit()和sys.exit()之间的区别
查看>>