如下段程序是一个网站维护程序,提供了以下功能选项:

  1. 允许本地IP访问远程服务器及网站:通过选择此功能,程序将允许指定的本地IP地址访问远程服务器及网站,并且可以指定开放的端口号。
  2. 仅允许本地IP访问远程服务器和网站:选择此功能后,程序将限制只有指定的本地IP地址可以访问远程服务器和网站,同时也可以指定开放的端口号。
  3. 禁止所有IP访问远程服务器和网站:通过选择此功能,程序将禁止所有IP地址访问远程服务器和网站,从而实现对外关闭访问的效果。
  4. 仅添加一个公网IP访问远程服务器:此功能可用于添加一个特定的公网IP地址访问远程服务器,同样也可以指定开放的端口号。
import json
from tencentcloud.common import credential
from tencentcloud.common.profile.client_profile import ClientProfile
from tencentcloud.common.profile.http_profile import HttpProfile
from tencentcloud.common.exception.tencent_cloud_sdk_exception import TencentCloudSDKException
from tencentcloud.lighthouse.v20200324 import lighthouse_client, models
import requests

def add_port(ip,open_port="22",status="ACCEPT"):
    try:
        # 实例化一个认证对象,入参需要传入腾讯云账户 SecretId 和 SecretKey,此处还需注意密钥对的保密
        # 代码泄露可能会导致 SecretId 和 SecretKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考,建议采用更安全的方式来使用密钥,请参见:https://cloud.tencent.com/document/product/1278/85305
        # 密钥可前往官网控制台 https://console.cloud.tencent.com/cam/capi 进行获取
        cred = credential.Credential("id","key")
        # 实例化一个http选项,可选的,没有特殊需求可以跳过
        httpProfile = HttpProfile()
        httpProfile.endpoint = "lighthouse.tencentcloudapi.com"

        # 实例化一个client选项,可选的,没有特殊需求可以跳过
        clientProfile = ClientProfile()
        clientProfile.httpProfile = httpProfile
        # 实例化要请求产品的client对象,clientProfile是可选的
        client = lighthouse_client.LighthouseClient(cred, "ap-guangzhou", clientProfile)

        # 实例化一个请求对象,每个接口都会对应一个request对象
        req = models.ModifyFirewallRulesRequest()
        params = {
            "InstanceId": "lhins-od0galu1",
            "FirewallRules": [
                {
                    "Protocol": "TCP",
                    "Port": open_port,
                    "CidrBlock": ip,
                    "Action": status,
                    "FirewallRuleDescription": "服务器远程访问"
                }
            ]
        }
        req.from_json_string(json.dumps(params))

        # 返回的resp是一个ModifyFirewallRulesResponse的实例,与请求对象对应
        resp = client.ModifyFirewallRules(req)
        # 输出json格式的字符串回包
        print(resp.to_json_string())
    except TencentCloudSDKException as err:
        print(err)
def add_https(ip="0.0.0.0/0",port ="443"):
    try:
        # 实例化一个认证对象,入参需要传入腾讯云账户 SecretId 和 SecretKey,此处还需注意密钥对的保密
        # 代码泄露可能会导致 SecretId 和 SecretKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考,建议采用更安全的方式来使用密钥,请参见:https://cloud.tencent.com/document/product/1278/85305
        # 密钥可前往官网控制台 https://console.cloud.tencent.com/cam/capi 进行获取
        cred = credential.Credential("id","key")
        # 实例化一个http选项,可选的,没有特殊需求可以跳过
        httpProfile = HttpProfile()
        httpProfile.endpoint = "lighthouse.tencentcloudapi.com"

        # 实例化一个client选项,可选的,没有特殊需求可以跳过
        clientProfile = ClientProfile()
        clientProfile.httpProfile = httpProfile
        # 实例化要请求产品的client对象,clientProfile是可选的
        client = lighthouse_client.LighthouseClient(cred, "ap-guangzhou", clientProfile)

        # 实例化一个请求对象,每个接口都会对应一个request对象
        req = models.CreateFirewallRulesRequest()
        params = {
            "InstanceId": "lhins-od0galu1",
            "FirewallRules": [
                {
                    "Protocol": "TCP",
                    "Port": port,
                    "CidrBlock": ip,
                    "Action": "ACCEPT",
                    "FirewallRuleDescription": "网站访问"
                }
            ]
        }
        req.from_json_string(json.dumps(params))

        # 返回的resp是一个CreateFirewallRulesResponse的实例,与请求对象对应
        resp = client.CreateFirewallRules(req)
        # 输出json格式的字符串回包
        print(resp.to_json_string())

    except TencentCloudSDKException as err:
        print(err)
def local_ip():
    url = "https://www.ipuu.net/ipuu/user/getIP"
    response = requests.get(url)
    data = response.json()
    return data["data"]
def caidan():
    print("""欢迎进入网站维护程序
    1 允许本地IP访问远程服务器及网站
    2 仅允许本地IP访问远程服务器和网站
    3 禁止所有IP访问远程服务器和网站 
    4 仅添加一个公网IP访问远程服务器
""")
while True:
    caidan()
    try:
        num = int(input("请输入你选择的功能序号:"))
        if  num == 1 :
            ip = input("请输入你要添加访问的IP地址,回车默认本地公网IP地址:") or local_ip()
            open_port = input("请输入要开放的TCP端口,默认22:") or "22"
            add_port(ip,open_port)
            add_https()
        elif num == 2 :
            ip = input("请输入你要添加访问的IP地址,回车默认本地公网IP地址:") or local_ip()
            open_port = input("请输入要开放的TCP端口,默认22:") or "22"
            add_port(ip,open_port)
            add_https(ip)
        elif num == 3 :
            add_port(local_ip(),open_port="22",status="DROP")
        elif num == 4:
            ip = input("请输入你要添加访问的IP地址,回车默认本地公网IP地址:") or local_ip()
            open_port = input("请输入要开放的TCP端口,默认22:") or "22"
            add_https(ip,open_port)
        else:
            print("功能选项不存在,退出程序,若需再次调式,请重新运行")
            exit()
    except ValueError:
        print("输入错误,请重新运行程序")