cpolar:通过脚本自动更新主机名称和端口号进行内网穿透【免费版】

news2025/1/12 15:45:55

cpolar 的免费版经常会重新分配 HostName 和 Port,总是手动修改太过麻烦,分享一下自动更新配置文件并进行内网穿透的方法。

文章目录

  • 配置 ssh config
  • 编写脚本
  • 获取 csrf_token
    • 打开登陆界面
    • Safari
    • Chrome
  • 设置别名

假设你已经配置好了服务器端的 cpolar。

配置 ssh config

该部分原文:SSH 远程登录服务器跑实验(含内网穿透)

现在配置一下主机的 ssh 文件。

vim ~/.ssh/config

config 参数:

  • Host: 别名,可以直接用于 ssh 登录
  • Hostname: IP 地址
  • Port: SSH 端口号(如果做了内网穿透,则需要填写对应的端口号)
    • 比如:下图对应的是 10387
      image
  • User: 登录的用户名
  • PreferredAuthentications: 指定客户端的认证方法为公钥
  • IdentityFile: 当前指的是私钥路径

P.S: 具体的参数信息可以通过 man ssh_config 查看

下面是配置文件样例(以 Ubuntu 为例):

Host Ubuntu-Nat-DDNS					# 你可以改成你想要的名字
	HostName 3.tcp.vip.cpolar.cn		# 填写公网ip
	Port 10387							# 公网 ip 对应的 端口号
	User xx								# 远程主机的登录名
	PreferredAuthentications publickey
    IdentityFile ~/.ssh/id_rsa_ubuntu	# 改成对应的私钥路径或者将其重命名

现在可以通过 ssh Ubuntu-Nat-DDNS 直接登陆。

但 cpolar 的免费版经常会重新分配 HostName 和 Port,所以需要配置一个自动更新的脚本。

编写脚本

vim ~/scripts/update_ssh_cfg.sh

以下是 Python 脚本代码:

#!/usr/bin/env python

import requests
from bs4 import BeautifulSoup
import re

# 登录函数
def login(login_url, username, password, csrf_token):
    session = requests.Session()
    payload = {
        'login': username,
        'password': password,
        'csrf_token': csrf_token
    }
    response = session.post(login_url, data=payload)
    if response.status_code == 200:
        return session
    else:
        raise Exception('登录失败')

# 获取目标字符串函数
def get_target_string(session, url):
    response = session.get(url)
    soup = BeautifulSoup(response.text, 'html.parser')
    target_element = soup.find('a', href="#ZgotmplZ")
    if target_element:
        return target_element.text
    else:
        raise Exception('隧道可能未激活')

# 提取 HostName 和 Port 函数
def extract_hostname_and_port(target_string):
    pattern = r'tcp://(.*?):(\d+)'
    matches = re.match(pattern, target_string)
    if matches:
        hostname = matches.group(1)
        port = matches.group(2)
        return hostname, port
    else:
        raise Exception('未找到匹配的字符串')

# 更新配置文件函数
def update_config_file(filename, hostname, port):
    with open(filename, "r") as file:
        content = file.readlines()

    is_modified = False
    for i, line in enumerate(content):
        if line.strip() == "Host Ubuntu-NAT-DDNS": # 如果使用的是其他别名,在这里修改
            hostname_line = content[i + 1].strip()
            if hostname_line.startswith("HostName") and hostname_line.split(" ")[-1] != hostname:
                content[i + 1] = f"    HostName {hostname}\n"
                is_modified = True
            port_line = content[i + 2].strip()
            if port_line.startswith("Port") and port_line.split(" ")[-1] != port:
                content[i + 2] = f"    Port {port}\n"
                is_modified = True

    if not is_modified:
        print("HostName 和 Port 未发生变化,无需更新。")
    else:
        with open(filename, "w") as file:
            file.writelines(content)
        print("已更新配置。")

# 主程序
def main():
    # 配置项
    username = ''
    password = ''
    csrf_token = ''
    login_url = 'https://dashboard.cpolar.com/login'
    content_url = 'https://dashboard.cpolar.com/status'
    config_filename = "/Users/home/.ssh/config"

    try:
        # 登录
        session = login(login_url, username, password, csrf_token)

        # 获取目标字符串
        target_string = get_target_string(session, content_url)
        print(target_string)

        # 提取 HostName 和 Port
        hostname, port = extract_hostname_and_port(target_string)
        print("HostName:", hostname)
        print("Port:", port)

        # 更新配置文件
        update_config_file(config_filename, hostname, port)

    except Exception as e:
        print("发生错误:", str(e))

# 运行主程序
if __name__ == "__main__":
    main()

为脚本添加执行权限:

chmod +x ~/scripts/update_ssh_cfg.sh

如果你不是使用 Ubuntu-NAT-DDNS 作为别名,则修改下方标注出的代码:

修改别名

另外,你需要填充上面的 usernamepasswordcsrf_token,其中 csrf_token 可以通过下面的方式获取。

获取 csrf_token

打开登陆界面

访问 https://dashboard.cpolar.com/login

login

Safari

点击开发->显示网页检查器 或者使用 option + command + L 打开网页检查器

网页检查器

输入账号密码进行登录,点击get-started -> 标头 -> 请求数据

请求数据

然后你就可以看到三个我们所需要的字段,将其填充回代码部分。
获取字段

Chrome

使用 F12 打开开发者工具,进入 Network,点击 login -> Payload 查看字段。
Chrome

通过以上步骤获取 usernamepasswordcsrf_token 后,填入代码并使用esc + :wq保存脚本。

设置别名

现在,我们可以使用 update_ssh_cfg && ssh Ubuntu-NAT-DDNS 自动完成内网穿透。

为了方便,我们可以为这段代码设置别名。首先,打开 .bashrc 或 .zshrc 文件(取决于你使用的 shell):

vim ~/.bashrc  # 或者 vim ~/.zshrc

在文件末尾添加以下别名配置:

alias update_ssh_cfg='~/scripts/update_ssh_cfg.sh'
alias SSH_UBUNTU='update_ssh_cfg && ssh Ubuntu-NAT-DDNS'

保存并关闭文件后,运行以下命令使修改生效:

source ~/.bashrc  # 或者 source ~/.zshrc

现在,可以使用 SSH_UBUNTU 自动更新 HostName 和 Port,并完成内网穿透。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1845499.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Apache DolphinScheduler 亚马逊云科技联合Meetup: 基于云上的最佳实践

引言 随着大数据和云计算技术的快速发展,企业在数据管理和任务调度上面临着前所未有的挑战,包括复杂的配置过程、性能优化和成本管理等问题。同时,确保数据在传输和存储过程中的安全性,并满足合规性要求,也是一个重要…

4LPFA清洗桶带隔板ICP-MS分析清洗系统高洁净特氟龙清洗设备

小瓶清洗系统PFA清洗桶品牌:南京瑞尼克 材质:PFA 耐受温度范围:-200C~260C 小瓶清洗系统是清洗实验室器皿有效的方法。该清洗系统由高纯PFA材质制成,专为热浸泡清洗设计,与传统玻璃烧杯相比,更结实。该小…

物理隔离状态下,如何保障数据单向导入的安全性?

为了保护企业的核心数据,像一些涉密行业会通过物理隔离方式,将网络隔离成内网和外网,比如军工、党政、生物医药、金融等行业,网络隔离后会存在外网数据单向导入内网,内网数据单向导出外网等交互需求。在实施数据单向导…

Python酷库之旅-第三方库openpyxl(01)

目录 一、 openpyxl库的由来 1、背景 2、起源 3、发展 4、特点 4-1、支持.xlsx格式 4-2、读写Excel文件 4-3、操作单元格 4-4、创建和修改工作表 4-5、样式设置 4-6、图表和公式 4-7、支持数字和日期格式 二、openpyxl库的优缺点 1、优点 1-1、支持现代Excel格式…

基于java+springboot+vue实现的便利店信息管理系统(文末源码+Lw)239

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本华府便利店信息管理系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的…

【机器学习 复习】第6章 支持向量机(SVM)

一、概念 1.支持向量机(support vector machine,SVM): (1)基于统计学理论的监督学习方法,但不属于生成式模型,而是判别式模型。 (2)支持向量机在各个领域内的…

从移动、桌面端到AR/VR:HOOPS Visualize如何实现卓越的3D模型可视化?

在当今迅速发展的技术环境中,高性能、跨平台的图形引擎是工程应用程序开发的核心需求。HOOPS Visualize作为一款领先的3D图形SDK,为桌面、移动和AR/VR应用程序提供了强大的2D和3D图形支持。其设计旨在实现工程应用程序中的高性能可视化,确保在…

还原试卷的软件叫什么?这3款一键还原

还原试卷的软件叫什么?在数字化学习日益普及的今天,学生们在处理试卷时经常面临一个问题:如何高效地将已作答的试卷还原成空白状态以便重复练习?为了解决这一问题,市场上涌现出了多款还原试卷的软件。下面,…

怎么使用Consul当配置中心和动态刷新配置

一、背景 由于Eureka官方已经正式宣布,自2.0起不再维护该项目,如果需要使用2.x,自行承担风险。 项目之前使用的Eureka,现在不维护了则需要寻找替代方案。现在Spring Cloud官方推荐Spring Cloud Consul替换Eureka作为注册中心&…

华为手机怎么找回删除的照片?掌握3个方法,恢复不是梦

由于误删、设备故障、软件更新等原因,我们有时可能会不慎丢失这些宝贵的照片。当面对空空如也的相册时,那种失落感无法言喻。华为手机该怎么找回删除的照片呢?但是,请不要绝望!在科技的帮助下,我们可以采取…

【CT】LeetCode手撕—300. 最长递增子序列

目录 题目1- 思路2- 实现⭐300. 最长递增子序列——题解思路 3- ACM 实现 题目 原题连接&#xff1a;300. 最长递增子序列 1- 思路 模式识别&#xff1a;最长递增子序列——> 利用动规五部曲 解决 ——> 借助 i 和 j 指针&#xff0c;其中 j < i 动规五部曲 1.定义…

深入理解和实现Windows进程间通信(管道)

进程间通信&#xff08;IPC&#xff0c;Inter-Process Communication&#xff09;是指在不同进程之间的数据传输。进程是操作系统分配资源和调度的独立单位&#xff0c;每个进程都有自己独立的地址空间&#xff0c;一个进程无法直接访问另一个进程的数据。因此&#xff0c;当需…

【Linux】进程信号2——阻塞信号,捕捉信号

1.阻塞信号 1.1. 信号其他相关常见概念 在开始内容之前&#xff0c;先介绍一些信号的专业名词&#xff1a; 实际执行信号的处理动作称为信号递达&#xff08;Delivery&#xff09;信号从产生到递达之间的状态&#xff0c;称为信号未决&#xff08;Pending&#xff09;&#…

Numpy: np.memmap详细用法

文章目录 0. 引言1. 基本用法2. 参数说明3. 例子3.1 读取内存映射文件3.2 修改内存映射文件 4. 使用场景5. 注意事项 0. 引言 np.memmap 是 NumPy 提供的一种用于内存映射大文件的类&#xff0c;允许大文件不完全加载到内存中&#xff0c;而是通过内存映射的方式部分加载。这在…

使用 Llama 3 开源和 Elastic 构建 RAG

作者&#xff1a;Rishikesh Radhakrishnan 使用开源的 Llama 3 和 Elastic 构建 RAG Llama 3 是 Meta 最近推出的开源大型语言模型。这是 Llama 2 的后继者&#xff0c;根据已发布的指标&#xff0c;这是一个重大改进。与 Gemma 7B Instruct、Mistral 7B Instruct 等最近发布的…

用于快速充电站的 AC/DC 转换器概述

电动汽车构成了未来实现可持续交通部门的有前途技术的主要部分。AC/DC 转换器是扩展和改进 EV 功能的骨干组件。本文概述了 AC/DC 转换器、充电站类型、传统两电平 (2L) AC/DC 转换器面临的问题以及使用多电平转换器 (MLC) 的重要性。 AC/DC 充电器示意图&#xff08;&#xff…

01 Shell编程规范与变量

1、Shell脚本概述 在一些复杂的Linux维护工作中&#xff0c;大量的重复性的输入和交互操作不仅费力费时&#xff0c;而且容易出错&#xff0c;而编写一个恰到好处的Shell脚本程序&#xff0c;可以批量处理、自动化地完成一系列维护任务&#xff0c;大大减轻管理员的负担。 Sh…

我在淄博,给唐朝古树办“身份证” | 《社区开放麦》首期预告

&#xff08;预约直播&#xff09; 或许每一个男孩都曾向往成为英雄&#xff0c;时常在内心预演用魔法拯救世界的场景。而回到没有超能力的现实生活&#xff0c;平凡人即便只有一技之长&#xff0c;也能拥有属于自己的“高光时刻”。 在开源社区&#xff0c;有这样一位青年对…

【机器学习 复习】第2章 线性回归及最大熵模型

一、概念 1.回归就是用一条曲线对数据点进行拟合&#xff0c;该曲线称为最佳拟合曲线&#xff0c;这个拟合过程称为回归。 2.一个自变量 叫 一元线性回归&#xff0c;大于一个自变量 叫 多元线性回归。 &#xff08;1&#xff09;多元回归&#xff1a;两个x&#xff0c;一个…

idea解决git代码冲突,提交代码冲突如何有效解决

当在提交代码的时候遇到问题冲突&#xff0c;是已经进行git commit , 但是在 git push 的时候&#xff0c;出现提交代码问题冲突 处理方式&#xff1a; 在IDEA 左下角&#xff0c;找到git 比如在git commint 之前忘记了 git pull ,那么很容易在git push 的时候出现问题&…